[英]Python: Converting HEX string to bytes
我正在嘗試制作將通過UDP發送的字節幀。 我有Frame類,它具有sync , frameSize , data , checksum等屬性。我使用十六進制字符串表示值。 像這樣:
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'
然后您會看到4
, D
, 6
和?
再次由正確的十六進制字符表示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.