利用kvaser和Python編寫監控介面(3)
阿新 • • 發佈:2019-01-11
在視窗中列印byte時,特殊現象的解釋
def printframe(frame, width): form = '═^' + str(width - 1) print(format(" Frame received ", form)) print("id:", frame.id) # id:784 print("data:", bytes(frame.data))# data: b'\x00\x00\x00\x00\x00\x00PP' print("dlc:", frame.dlc) # dlc:8 print("flags:", frame.flags) # flags: MessageFlag.STD print("timestamp:", frame.timestamp) # timestamp: 3165
上述程式碼為kvaser官網提供的一段程式,註釋後面的內容代表實際打印出來的內容。
剛開始看到b'\x00\x00\x00\x00\x00\x00PP'
時,無法理解為什麼byte後面帶有字元“PP”
然後,編寫了下面的程式碼一探究竟。列印程式碼後面的註釋部分,代表實際打印出來的內容
data =b'\x00\x00\x00\x00\x00\x00PP' data_hex = data.hex() print(type(data_hex)) # <class 'str'> print(len(data_hex)) # 16 print(data_hex) # 0000000000005050 datafromhex = bytes.fromhex(data_hex) print(datafromhex) # b'\x00\x00\x00\x00\x00\x00PP'
檢視ASCII可顯示字元表,發現十六進位制數50對應的圖形P。
data =b'\x90\xe8\x00\x00\x00\x000H'
data_hex = data.hex()
print(type(data_hex))
print(len(data_hex))
print(data_hex) # 90e8000000003048
datafromhex = bytes.fromhex(data_hex)
print(datafromhex)
檢視ASCII可顯示字元表,發現十六進位制數30對應的圖形0,十六進位制數48對應圖形H
由此可見,byte型別在列印到視窗時,除了利用轉義字元 \x 來顯示十六進位制數以外,還會直接用ASCII可顯示字元表中對應的圖形
為了顯示原始的十六進位制數,可以採用函式hex()將byte轉化成string進行顯示