1. 程式人生 > >利用kvaser和Python編寫監控介面(3)

利用kvaser和Python編寫監控介面(3)

在視窗中列印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進行顯示