繁体   English   中英

如何在python中将char转换为有符号整数

[英]How to convert a char to signed integer in python

我对 Python 没有太多经验,所以我需要你的帮助! 在下面的示例中,我可以将 char 转换为无符号整数,但我需要一个有符号整数。 如何在 python 中将 char 转换为有符号整数?

d="bd"
d=int(d,16)
print (d)

结果是:189 但我期望:-67

首先是挑剔:它不是一个字符,而是一个字符串。

主要问题是int()无法知道输入应该多长时间; 或者换句话说:它不知道哪个位是指定符号的 MSB(最高有效位)。 在 python 中, int仅表示“整数,即任何整数”。 与 C 不同,没有定义数字的位大小。

对于int() ,输入000000bdbd因此是相同的; 符号由-前缀的存在与否决定。

对于输入数字的任意位数(不仅是标准的 8、16、32,...),您需要手动执行二补码转换步骤,并告诉它假定的输入大小。 (在 C 中,您可以通过将转换结果分配给目标位大小的整数变量来隐式执行此操作)。

def hex_to_signed_number(s, width_in_bits):
    n = int(s, 16)
    while( 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 将字节转换为整数,这将为您提供负整数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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