繁体   English   中英

从十六进制转换为有符号整数不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM