用Python将整数转换为两字节十六进制
我需要把一个整数(比如说,-200)转换成十六进制(FF 38),然后再转换成一个0到255之间的整数,以便通过串口发送。给我的例子是:
-200 = hex FF38 = [hex FF] [hex 38] = [255] [56]
我试过用 struct.pack('>h', -200)
,但返回的值不对。我也试过 hex()
,但是得到的负十六进制值也是不正确的。
我不知道还应该尝试什么其他的方法。
2 个回答
0
二进制补码运算和一些字符串切片:
hex(200 - (1 << 16)) #2 bytes -> 16 bits
Out[26]: '-0xff38'
int(hex(200 - (1 << 16))[-4:-2], 16)
Out[28]: 255
int(hex(200 - (1 << 16))[-2:], 16)
Out[29]: 56
请注意,你需要小心处理非负数(也就是说,不要对它们进行二进制补码运算),还有当通过 hex
返回的字符串长度不一致时的情况。
3
>>> hex(struct.unpack('>H', struct.pack('>h', -200))[0])
'0xff38'
首先,你把-200打包成一个带符号的2字节短整型。然后你把这个数据解包成一个无符号的2字节短整型。这样你得到的结果是65336,换算成hex
就是ff38
如果你需要发送0-255
的整数,这样做可能更好:
>>> struct.unpack('>BB', struct.pack('>h', -200))
(255, 56)
>>> struct.unpack('>BB', struct.pack('>h', 200))
(0, 200)
这里你是把数据解包成两个无符号字符
相关的文档关于struct