输入='FFFF'#4 ASCII F
期望的结果...... -1作为整数
代码试过:
hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535
结果:65535
我所尝试过的任何内容似乎都没有发现'FFFF'代表负数。
答案 0 :(得分:10)
Python将'面值'处的FFFF转换为十进制65535
input = 'FFFF'
val = int(input,16) # is 65535
您希望将其解释为16位有符号数。 下面的代码将取任何数字的低16位,并且'sign-extend',即解释 作为16位有符号值并传递相应的整数
val16 = ((val+0x8000)&0xFFFF) - 0x8000
这很容易推广
def sxtn( x, bits ):
h= 1<<(bits-1)
m = (1<<bits)-1
return ((x+h) & m)-h
答案 1 :(得分:2)
在像C这样的语言中,'FFFF'可以解释为有符号(-1)或无符号(65535)值。您可以使用Python的struct模块强制执行您想要的解释。
请注意,可能存在以下代码未尝试处理的字节顺序问题,并且它不处理超过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)