如何将十六进制字符串转换为Python

问题描述 投票:0回答:1
结果是:189 但我希望:-67

首先是一个nitpick:不是字符,它是字符串。
主要问题是

int()

不知道输入应该多长时间;或换句话说:它不知道指定标志的MSB(最重要的位)。在python中,
python python-3.x type-conversion signed unsigned-integer
1个回答
3
投票
仅表示“整数,即任何整数”。与C.

不同,没有定义的数字大小。

对于

int()

,输入
000000bd
bd

因此是相同的;符号取决于存在或不存在

-

前缀。
对于您的输入号码的任意位计数(不仅是标准的8、16、32,...),您将需要手动执行两组转换步骤,并告诉其所谓的输入大小。 (在C中,您可以通过将转换结果分配给目标位大小的整数变量来隐含地做到这一点)。
def hex_to_signed_number(s, width_in_bits):
    n = int(s, 16) & (pow(2, width_in_bits) - 1)
    if( n >= pow(2, width_in_bits-1) ):
        n -= pow(2, width_in_bits)
    return n
该功能的某些测试容器:
In [6]: hex_to_signed_number("bd", 8)
Out[6]: -67

In [7]: hex_to_signed_number("bd", 16)
Out[7]: 189

In [8]: hex_to_signed_number("80bd", 16)
Out[8]: -32579

In [9]: hex_to_signed_number("7fff", 16)
Out[9]: 32767

In [10]: hex_to_signed_number("8000", 16)
Out[10]: -32768

print(int.from_bytes(bytes.fromhex("bd"), byteorder="big", signed=True))
您可以将字符串转换为字节,然后通过将签名添加到true来将字节转换为int,这将为您带来负整数值。
    

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.