簡體   English   中英

使用Python將整數轉換為雙字節十六進制

[英]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,其中hexff38


如果你需要發送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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM