我正在尝试将2.5程序转换为3。
在python 3中是否有办法将字节字符串(例如b'\ x01 \ x02')更改为python 2.5样式字符串,例如'\ x01 \ x02',以便字符串和逐字节比较与2.5相似吗?我正在从二进制文件中读取字符串。
我有一个2.5程序从文件中读取字节,然后比较或处理每个字节或字节组合与指定的常量。要运行3下的程序,我想避免将所有常量更改为字节和字节字符串('\ x01'到b'\ x01'),然后处理3中的问题,如:
a = b'\x01'
b = b'\x02'
结果
(a+b)[0] != a
即使类似的操作工作在2.5。我必须做(a + b)[0] == ord(a),而a + b == b'\ x01 \ x02'工作正常。 (顺便说一句,我该如何处理(a + b)[0]所以它等于?)
解包结构也是一个问题。
我错过了一些简单的东西吗?
答案 0 :(得分:3)
字节是一个不可变的整数序列(在0 <=至<256的范围内),因此当您访问(a+b)[0]
时,您将获得一个整数,与您获得的整数完全相同访问a[0]
。因此,当您将序列a
与整数(a+b)[0]
进行比较时,它们自然会有所不同。
使用切片表示法,你可以得到一个序列:
>>> (a+b)[:1] == a # 1 == len(a) ;)
True
因为切片返回字节对象。
我还建议运行2to3实用程序(它需要与py2k一起运行)来自动转换一些代码。它不能解决你所有的问题,但它会有很多帮助。