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

use*_*597 8 python binary

输入='FFFF'#4 ASCII F'

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

代码试过:

hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535
Run Code Online (Sandbox Code Playgroud)

结果:65535

我所尝试过的任何事情似乎都没有认识到'FFFF'是负数的表示.

gre*_*ggo 10

Python将'面值'处的FFFF转换为十进制65535

input = 'FFFF'
val = int(input,16) # is 65535
Run Code Online (Sandbox Code Playgroud)

您希望它被解释为16位有符号数.下面的代码将取任何数字的低16位,并且'sign-extend',即解释为16位有符号值并传递相应的整数

val16 = ((val+0x8000)&0xFFFF) - 0x8000
Run Code Online (Sandbox Code Playgroud)

这很容易推广

def sxtn( x, bits ):
     h= 1<<(bits-1)
     m = (1<<bits)-1
     return ((x+h) & m)-h
Run Code Online (Sandbox Code Playgroud)