我正在尝试将此十六进制字符串 F1
转换为有符号整数。
所以我应该得到结果 -15
我这里有一个Python函数,它工作得很好,但不知何故不适用于这个字符串F1
代码:
def get_signed_value(value):
return -(value & 0x8000) | (value & 0x7fff)
如果我传递 FF5F
作为值,那么我会得到 -161
作为正确的响应。
但是,如果我通过 F1
我会得到 241
作为响应,这不是正确的值。
最佳答案
您的函数设计用于值范围为 −32.768 (0x8000) to 32.767 (0x7fff)
的 16 位数字,而0xf1
只是一个8位数字,取值范围为-128 (0x80) to 127 (0x7f)
。因此,return
函数中的语句不正确应用。
您必须根据十六进制数中的位数来更改函数。对于 8 位:
def get_8bit_signed_value(value):
return -(value & 0x80) | (value & 0x7f)
然后
get_8bit_signed_value(int('0xf1', 16))
返回您想要的-15
对于 0xf1
。您可以使用 nbits
自动执行此功能。通过 1 << (nbits-1)
计算值范围限制来获取数字
关于python - 从十六进制到有符号整数的转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54212414/