[英]Conversion from hex to signed int not working
我正在尝试将此十六进制字符串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
只是一个值范围为-128 (0x80) to 127 (0x7f)
的 8 位数字. 因此,函数中的return
语句不能正确应用。
您必须根据十六进制数中的位数来更改函数。 对于 8 位:
def get_8bit_signed_value(value):
return -(value & 0x80) | (value & 0x7f)
然后
get_8bit_signed_value(int('0xf1', 16))
为0xf1
返回您想要的-15
。 您可以通过1 << (nbits-1)
计算值范围限制,为具有nbits
位数的位数自动执行此功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.