Python中如何将十六进制字符串转换为有符号整数?
十六进制字符串转8位有符号整数的实现方法
你现在的代码把十六进制字符串"bd"转成了无符号整数189,要得到对应的8位有符号整数-67,核心是遵循8位有符号数的溢出规则:8位有符号整数的范围是-128到127,当无符号值大于等于128时,减去2^8(即256)就能得到对应的有符号值。
这里提供两种实用的实现方式:
方法一:手动计算转换
先将十六进制转成无符号整数,再根据范围判断调整:
s = "bd" unsigned_val = int(s, 16) signed_val = unsigned_val - 256 if unsigned_val >= 128 else unsigned_val print(signed_val) # 输出:-67
方法二:使用struct标准库
利用Python内置的struct模块直接解析为有符号整数,这种方式还能方便扩展到其他位数的有符号转换:
import struct s = "bd" # 'b'表示解析为8位有符号整数,bytes.fromhex(s)将十六进制字符串转为字节 signed_val = struct.unpack('b', bytes.fromhex(s))[0] print(signed_val) # 输出:-67
如果需要处理16位、32位的有符号转换,只需把struct.unpack的格式符换成'h'(16位)或'i'(32位),注意对应十六进制字符串的长度要匹配位数要求。
内容的提问来源于stack exchange,提问作者Othman
相关产品推荐
相关产品推荐

