将2.5字节比较转换为3

时间:2009-09-19 23:32:17

标签: python python-3.x

我正在尝试将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]所以它等于?)

解包结构也是一个问题。

我错过了一些简单的东西吗?

1 个答案:

答案 0 :(得分:3)

字节是一个不可变的整数序列(在0 <=至<256的范围内),因此当您访问(a+b)[0]时,您将获得一个整数,与您获得的整数完全相同访问a[0]。因此,当您将序列a与整数(a+b)[0]进行比较时,它们自然会有所不同。

使用切片表示法,你可以得到一个序列:

>>> (a+b)[:1] == a         # 1 == len(a) ;)
True

因为切片返回字节对象。

我还建议运行2to3实用程序(它需要与py2k一起运行)来自动转换一些代码。它不能解决你所有的问题,但它会有很多帮助。