如何从 Python 中的 CAN 报文中删除 ASCII 格式的字符?

How to remove ASCII formatted characters from my CAN messages in Python?

提问人:oznurc 提问时间:10/11/2023 最后编辑:ddaoznurc 更新时间:10/11/2023 访问量:56

问:

我想从我的字节数组中删除 ASCII 字符,并看到它包含十六进制数。为了更好地解释它:我使用 pyton-can 库从 CANbus 接收 CAN 报文,并捕获它们以存储在变量中。当我打印它时,我看到:message

ByteArray(b'\x00\x00^]b\tb\xd9')

但是我不想看到 ASCII 字符,我希望它打印它,例如 b'\x00\x00\x01\x65\xA5\x12\x1A\xBB

那我该怎么办?

我的代码现在如下所示:

#receiving CAN Bus messages here
bus = can.interface.Bus(interface='kvaser', channel=0, bitrate=1000000)
byte_index_to_check = 1
msg = can.Message(arbitration_id=0x007)
bus.send(msg)
recvMsg = bus.recv(timeout=0.5)
message = bus.recv()
received_message = hex(message.data[byte_index_to_check])

last_message = message
last_received = received_message
print("last message",last_message.data)
python 消息 can-bus python-can

评论


答:

1赞 dda 10/11/2023 #1

您与其说是想删除字符,不如说是将它们转换为十六进制。该库就是这样做的:binascii

binascii.b2a_hex(message, b' ')
0赞 tripleee 10/11/2023 #2

如果要保留相同的代码,可以继承并重写该方法。bytes__repr__

class hexbytes(bytes):
    def __repr__(self):
        return r"b'" + "".join(hex(b).replace("0", "\\") for b in self.__bytes__()) + "'"
...
message = hexbytes(bus.recv())