使用Python将整数转换为双字节十六进制

时间:2014-03-06 03:33:41

标签: python python-2.7 math raspberry-pi

我需要取一个整数(例如-200)并将其更改为十六进制(FF 38),然后转换为整数0-255以通过串行发送。我得到的例子是:

-200 = hex FF38 = [hex FF] [hex 38] = [255] [56]

我尝试过使用struct.pack('>h', -200),但返回的值不正确。我也试过了hex()但是返回了一个负十六进制值也是错误的。

我不知道我还应该尝试什么。

2 个答案:

答案 0 :(得分:3)

>>> hex(struct.unpack('>H', struct.pack('>h', -200))[0])
'0xff38'

首先,将-200打包为签名的2字节短整数。然后将该数据解压缩为无符号2字节短整数。这为您提供了65336,其中hexff38


如果您需要发送0-255个整数,这可能会更好:

>>> struct.unpack('>BB', struct.pack('>h', -200))
(255, 56)
>>> struct.unpack('>BB', struct.pack('>h', 200))
(0, 200)

你打开两个无符号字符

的地方

struct

上的必备documentation

答案 1 :(得分: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返回的字符串长度不同时。