0

从 CAN DBC 文件中,我获取少量 Can 消息并为 Can 消息的每个信号分配值,然后对其进行编码以发送 can 消息。

对于每个信号,数据以不同的方式编码(下面列出了几个示例)

Data1--> b'\x00\x00d\x01P\x00\x00\x01'
Data2--> b'\x01\x81\x0f\x11\xc8\x00\x00\x00'
Data3--> b'\x00\x00d\x01P\x00\x00\x01'

我的疑问是.. x00d,x01P,x00d 这些数据的含义是什么,它表示什么剂量(P 和 d 是什么)。

请让我知道为什么数据字节采用这种格式(例如:x00d,x01P,x00d)以及如何以正常/通常格式获取数据(例如:Data2--> b'\x01\x81\x0f\x11\xc8 \x00\x00\x00' )

4

2 回答 2

0

您在字节串中看到的dP值是碰巧代表 ASCII 字符的字节。所以 Python 以这种方式显示它们。如果您想查看所有字节的原始十六进制值,您可以bytes.hex()在字节串上调用该方法,它会为您提供如下输出:('0000640150000001'其中 64 replacesd50replaces P)。

但是如果你只是传递字节对象,你可能不需要做任何事情。期望字节对象的代码会发现b'd'与 一样可以接受b'\x64',因为它们是编写相同字符的两种方式。

于 2021-11-12T07:00:58.813 回答
0

这与 C 字符串常量完全一样。当字节是可打印的 ASCII 值时,它会显示 ASCII。如果不是,它会显示十六进制。因此,您的第一个和第三个字符串代表十六进制字节00 00 64 01 50 00 00 01。你的第二个是01 81 0f 11 c8 00 00 00

大多数情况下,你不应该担心这个如果你不自己格式化,这就是 Python 打印字节字符串的方式。

于 2021-11-12T07:01:12.517 回答