在CAN、LIN、Ethernet等车载总线上,数据通常是以Bytes类型进行传输的。
所以在测试过程中从Bytes转为Hex格式的string,以及反向的转换就变得十分常用。
我们以一条诊断测试的Case为例:
-
Case内容如下:
Step: 0x773 22 F1 87
Expect: 0x7FF 62 F1 87 31 32 33 34 35 36 -
测试工具实际的转换步骤如下:
(1)测试工具读取字符串22 F1 87,并将其转为Bytes类型。
(2)测试工具将转换后的Bytes数据通过ID: 0x773,赋值给总线工具的发送接口。
(3)总线工具将其发送到车载总线上,等待被测节点ID: 0x7FF的应答。
(4)被测节点,回复Bytes类型的62 F1 87 31 32 33 34 35 36到总线上。
(5)测试工具接收后,将其再转为String类型,并与Case字符串做比对,并产生判断结果。 -
过程中使用了如下函数。
(1)以上步骤1中,需要使用到一个库名为binascii,此库主要用于二进制与ASCII码之间进行装换。其中的a2b_hex子函数的作用,是将HEX类型的字符串,直接转为Bytes类型。
import binascii
s = '22F187'
b = binascii.a2b_hex(s) # 字符被转为了Bytes '22F187'->b'\x22\xF1\x87'
(2)步骤4中,我们用到了Bytes到Hex(String)的转换。这里我们用到了bytes内置方法.hex()。
s = '62F187313233343536'
b = binascii.a2b_hex(s) #通过a2b_hex模拟产生一个bytes类型的62F187313233343536
s = b.hex().upper() #将此bytes数据转为了string类型,这里转换后字符默认是小写字符,所以转为大写。
print(s)










网友评论