Python3:转换或' Casting'字节数组字符串从字符串到字节数组

时间:2014-03-18 12:12:03

标签: python-3.x casting bytearray

这个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')

......好吧,它很有用。

如果有人知道更优雅的解决方案,也许你会发表这篇文章。

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