輸入= 'FFFF' #4 ASCII F公司我如何十六進制的ASCII字符串轉換爲有符號整數
期望的結果... -1爲整數
代碼嘗試:
hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535
結果:65535
沒有我試過似乎認識到'FFFF'是一個負數的表示。
輸入= 'FFFF' #4 ASCII F公司我如何十六進制的ASCII字符串轉換爲有符號整數
期望的結果... -1爲整數
代碼嘗試:
hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535
結果:65535
沒有我試過似乎認識到'FFFF'是一個負數的表示。
的Python轉換FFFF在 '面值',爲十進制65535
input = 'FFFF'
val = int(input,16) # is 65535
你想讓它解釋爲一個16位有符號數。 下面的代碼將採取任何數量的低16位,和「符號擴展」,即解釋 作爲16位有符號值,並提供相應的整數
val16 = ((val+0x8000)&0xFFFF) - 0x8000
這是很容易推廣
def sxtn(x, bits):
h= 1<<(bits-1)
m = (1<<bits)-1
return ((x+h) & m)-h
是的,'如果val> = 0x8000:val - = 0x10000'在輸入已知爲0 .. 0xFFFF(來自Jan Dvorak)的情況下也可以正常工作。 – greggo
在像C這樣的語言中,'FFFF'可以解釋爲signed(-1)或unsigned(65535)值。你可以使用Python的結構模塊來強制你想要的解釋。
請注意,可能存在下面的代碼沒有嘗試處理的字節順序問題,並且它不處理長度超過16位的數據,所以如果其中任何一種情況是對你有效。
import struct
input = 'FFFF'
# first, convert to an integer. Python's going to treat it as an unsigned value.
unsignedVal = int(input, 16)
assert(65535 == unsignedVal)
# pack that value into a format that the struct module can work with, as an
# unsigned short integer
packed = struct.pack('H', unsignedVal)
assert('\xff\xff' == packed)
# ..then UNpack it as a signed short integer
signedVal = struct.unpack('h', packed)[0]
assert(-1 == signedVal)
類似的東西(我不知道語法)'if(value> 0x7FFF)value - = 0x10000'? –