利用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进行显示

猜你喜欢

转载自blog.csdn.net/Aiyanghong/article/details/85248253