簡體   English   中英

Python:將十六進制字符串轉換為字節

[英]Python: Converting HEX string to bytes

我正在嘗試制作將通過UDP發送的字節幀。 我有Frame類,它具有syncframeSizedatachecksum等屬性。我使用十六進制字符串表示值。 像這樣:

testFrame = Frame("AA01","0034","44853600","D43F")

現在,我需要將十六進制值連接在一起,然后將它們轉換為字節數組?

def convertToBits(self):
    stringMessage = self.sync + self.frameSize + self.data + self.chk
    return b16decode(self.stringMessage)

但是當我打印轉換后的值時,我沒有得到相同的值,或者我不知道如何正確讀取python表示法:

This is sync: AA01
This is frame size: 0034
This is data:44853600
This is checksum: D43F

b'\xaa\x01\x004D\x856\x00\xd4?'

因此,第一個單詞可以正確轉換(AA01-> \\ xaa \\ x01),但(0034-> \\ x004D)則不一樣。 我嘗試使用bytearray.fromhex,因為我可以在字節之間使用空格,但得到的結果相同。 您能幫我通過UDP發送相同的十六進制字嗎?

Python顯示可以表示可打印ASCII字符的任何字節。 4\\x34相同,但是它選擇在表示中打印ASCII字符。

那么\\x004確實與\\x00\\x34相同, D\\x856\\x00\\x44\\x85\\x36\\x00\\xd4? \\xd4\\x3f相同,因為:

>>> b'\x34'
'4'
>>> b'\x44'
'D'
>>> b'\x36'
'6'
>>> b'\x3f'
'?'

這只是字節值的表示 該值是完全正確的 ,您無需執行任何其他操作。

如果有幫助,您可以使用binascii.hexlify()bytes值再次可視化為十六進制:

>>> import binascii
>>> binascii.hexlify(b'\xaa\x01\x004D\x856\x00\xd4?')
b'aa01003444853600d43f'

然后您會看到4D6? 再次由正確的十六進制字符表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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