[英]Translating an integer into two-byte hexadecimal with Python
我需要取一個整數(例如,-200)並將其更改為十六進制(FF 38),然后轉換為整數0-255以通過串行發送。 我得到的例子是:
-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字節short int 。 然后將該數據解壓縮為無符號的2字節short int 。 這給你65336,其中hex
是ff38
如果你需要發送0-255
整數,這可能會更好:
>>> struct.unpack('>BB', struct.pack('>h', -200))
(255, 56)
>>> struct.unpack('>BB', struct.pack('>h', 200))
(0, 200)
你打開兩個未簽名的字符的地方
關於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
返回的字符串長度變化時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.