提问人:oznurc 提问时间:10/11/2023 最后编辑:ddaoznurc 更新时间:10/11/2023 访问量:56
如何从 Python 中的 CAN 报文中删除 ASCII 格式的字符?
How to remove ASCII formatted characters from my CAN messages in Python?
问:
我想从我的字节数组中删除 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)
答:
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())
评论