python - 从十六进制到有符号整数的转换不起作用

标签 python python-3.x hex

我正在尝试将此十六进制字符串 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/

相关文章:

python - Pandas 新列作为另一列的字符串提取,仅在验证字符串长度的特定条件下 : Fast way

python - 并行 LSTM 分别处理输入的不同部分

python - 如何在另一个列表的元组中插入列表元素

python-3.x - 无法安装twis​​ted(获取scrapy)

c++ - 我怎样才能阻止我的整数显示为十六进制?

C/实时用不同类型的数据初始化内存

python - Django - 查询集以获取模型的所有相关详细信息

python - flask request.environ.get ('HTTP_REFERER' 、 "")的 fastApi 模拟是什么?

Python 返回 map 对象

ios - 为什么 iOS UDID 区分大小写?