从字节中删除 '\x'

Remove '\x' from bytes

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

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

也不可能遍历每个字节并删除前两项,因为 python 仍然将整个字节视为一个对象。

这是我在附加两个字节后得到的列表:

虽然它看起来像两个字符串,但它们的行为并不像字符串。然后我使用以下方法遍历列表:

for x in a:
    print a

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

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

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

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

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

我们知道它总是以\x开头,'it'是一个字符串。所以我们可以做...

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

更新:

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

对标准长度类型执行此操作的另一种方法是使用 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 字节整数。其他格式字符串可用于指定其他大小、字节顺序和 signed/unsigned 状态。

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

您可以将 byte 对象转换为 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

我遇到了同样的问题。我有一个“字节”对象,我需要删除 \xs 才能将我的文件上传到 Cassandra,我需要做的就是使用这个:

my_bytes.hex()