我需要取整數(例如-200)並將其更改爲十六進制(FF 38),然後將其轉換爲通過串行發送的整數0-255。我給出的例子是:使用Python將整數轉換爲雙字節十六進制
-200 = hex FF38 = [hex FF] [hex 38] = [255] [56]
我一直在使用struct.pack('>h', -200)
嘗試,但返回的值不正確。我也試過hex()
,但是它返回了一個不正確的負十六進制值。
我不知道還有什麼我應該嘗試。
我需要取整數(例如-200)並將其更改爲十六進制(FF 38),然後將其轉換爲通過串行發送的整數0-255。我給出的例子是:使用Python將整數轉換爲雙字節十六進制
-200 = hex FF38 = [hex FF] [hex 38] = [255] [56]
我一直在使用struct.pack('>h', -200)
嘗試,但返回的值不正確。我也試過hex()
,但是它返回了一個不正確的負十六進制值。
我不知道還有什麼我應該嘗試。
>>> hex(struct.unpack('>H', struct.pack('>h', -200))[0])
'0xff38'
首先,你包-200作爲簽署2個字節的短整型。然後,您將該數據解壓縮爲無符號2字節短int。這給你65336,其中hex
是ff38
如果您需要發送0-255
整數,這可能會更好地工作:當你拆開成兩個無符號的字符
>>> struct.unpack('>BB', struct.pack('>h', -200))
(255, 56)
>>> struct.unpack('>BB', struct.pack('>h', 200))
(0, 200)
需要documentation上struct
兩個碼算術運算和一些字符串切片:
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
返回的字符串長度各不相同。
你需要發送一個十進制整數'b'255''(三個字節)或只是一個字節:'b'\ xff''(單個字節)? – jfs