如何将十六进制ASCII字符串转换为有符号整数

2024-04-18 22:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

尝试的代码:

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

结果:65535

我试过的任何东西似乎都没有意识到“FFFF”是负数的表示。


Tags: 代码ascii整数resultintprint意识负数
2条回答

在C语言中,“FFFF”可以解释为有符号(-1)或无符号(65535)值。您可以使用Python的struct模块强制您想要的解释。

请注意,下面的代码可能不会尝试处理endianness问题,并且它不会处理超过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)

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

相关问题 更多 >