如何使用python3将十六进制转换为有符号整数

问题描述

使用pyhton3打印结果的最简单方法是什么

  1. 我有一个十六进制字符串 s="FFFC"
  2. 在 python 中,如果使用此命令行:print(int(s,16))
  3. 我期望的结果是 -4(采用签名格式)。但事实并非如此,它显示结果为 65,532 的 Unsigned 格式。
  4. 我怎样才能以最简单的方式转换它?

提前致谢。

解决方法

有几种方法,但您可以明确地进行数学计算(假设 s 的字符不超过 4 个,否则使用 s[-4:]):

i = int(s,16)
if i >= 0x8000:
    i -= 0x10000
,

您可以使用 bytes.fromhexint.from_bytes 类方法。

s = bytes.fromhex('FFFC')
i = int.from_bytes(s,'big',signed=True)
print(i)

不言自明,唯一可能需要澄清的是 'big' 参数,但这仅意味着字节数组 s 的最高有效字节在前。