8

输入 = 'FFFF' #4 ASCII F's

期望的结果... -1 作为整数

代码尝试:

hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535

结果:65535

我尝试过的任何事情似乎都没有认识到“FFFF”是负数的表示。

4

2 回答 2

10

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
于 2012-12-22T15:21:30.470 回答
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)
于 2012-12-22T14:00:26.167 回答