这个python的新东西。 不久之前,我保存了连接到串口的外部设备的输出,因为我无法保留该设备。我在串口读取数据作为字节,目的是为该设备创建一个仿真器。 每行将一个“字节”数据保存到文件中,如下面的示例摘录。
b'\x9a'
b'X'
b'}'
b'}'
b'x'
b'\x8c'
我想从数据捕获中读取每一行,并将原始字节附加到字节数组中。 我在bytearray上尝试了各种append()和连接操作(+ =),但上面的行是python字符串对象,这些操作都失败了。
是否有一种简单的方法(内置方式?)将这些行的每个原始字节值添加到字节数组中?
感谢。
中号
更新 我遇到了.encode()字符串方法,并创建了一个粗略的函数来满足我的需求。
def string2byte(str):
# the 'byte' string will consist of 5, 6 or 8 characters including the newline
# as in b',' or b'\r' or b'\x0A'
if len(str) == 5:
return str[2].encode('Latin-1')
elif len(str) == 6:
return str[3].encode('Latin-1')
else:
return str[4:6].encode('Latin-1')
......好吧,它很有用。
如果有人知道更优雅的解决方案,也许你会发表这篇文章。
答案 0 :(得分:1)
b'\x9a'
是Python源代码中字节0x9a
的文字表示。如果您的文件字面上包含这七个字符b'\x9a'
,那么它很糟糕,因为您可以仅使用一个字节保存它。您可以使用ast.literal_eval()
将其转换为字节:
import ast
with open('input') as file:
a = b"".join(map(ast.literal_eval, file)) # assume 1 byte literal per line