我正在从文件中读取字节,我想将其中两个字节放入一个列表中并将它们转换为整数。假设我想要读取的两个字节是\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:])
答案 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']