删除' \ x'从字节

时间:2015-03-04 19:17:17

标签: python replace binary byte

我正在从文件中读取字节,我想将其中两个字节放入一个列表中并将它们转换为整数。假设我想要读取的两个字节是\x02\x00我想将这些字节连接在一起,然后将它们转换为整数,例如0x0200,但我很难这样做,因为我不能从字节中删除\x

我尝试过使用:.replace('\\x', '')虽然这不起作用,因为python将字节视为一个对象而不是列表。我也考虑使用struct,虽然我不确定这是否适用于我的情况。

由于python仍然将整个字节视为一个对象,因此也无法遍历每个字节并删除前两个项目。

这是我用两个字节附加它后的列表:

虽然它看起来像两个字符串,但它们不像字符串那样。然后我使用:

遍历列表
for x in a:
    print a

列表下方的两行是'print a'(空格和特殊字符)的输出。如您所见,它们不会像普通字符串那样打印。

下面是一个代码片段,展示了如何将字节添加到数组中,没有什么复杂的(在这种情况下测试是数组)。

for i in openFile.read(512):
    ....
    ....
    elif 10 < count < 13:
        test.insert(0, i[0:])

4 个答案:

答案 0 :(得分:3)

您可以使用ord提取每个字符的数值,然后将它们与简单的算术结合起来。

>>> a = '\x02'
>>> b = '\x00'
>>> c = ord(a)*256 + ord(b)
>>> c == 0x0200
True
>>> print hex(c)
0x200

答案 1 :(得分:3)

对标准长度类型执行此操作的另一种方法是使用struct模块将字节字符串转换为Python类型。

例如:

>>> import struct
>>> byte_arr = ['\x02', '\x00']
>>> byte_str = ''.join(byte_arr)
>>> byte_str
'\x02\x00'
>>> num, = struct.unpack('>H', byte_str)
>>> num
512

在此示例中,格式字符串'>H'表示大端无符号2字节整数。其他格式字符串可用于指定其他大小,字节顺序和签名/无符号状态。

答案 2 :(得分:0)

new_str=str(your_byte_like_object).split('\\x')
print("".join(new_str))

您可以将字节对象转换为str并使用\ x将其拆分为分隔符 您会得到一个列表并将其加入。

仅此而已。

输出如下:

eigioer #text

b'0\x1e\xd7\xe8\xdf\xc1\xd7\x90o3`mD\x92U\xf5\xca\xe7l\xe5"TM' #raw byte
["b'0", '1e', 'd7', 'e8', 'df', 'c1', 'd7', '90o3`mD', '92U', 'f5', 'ca', 'e7l', 'e5"TM\''] #list
b'01ed7e8dfc1d790o3`mD92Uf5cae7le5"TM' #after joining

答案 3 :(得分:-1)

我们知道它始终以\ x开头,并且&#39;它&#39;是一个字符串。所以我们可以做......

>>> num = "\\x02"
>>> num = num[2:]
>>> print num
02

更新

>>> num = [r"\x02", r"\x20"]
>>> num = [ n[2:] for n in num ]
>>> num
['02', '20']