python中的字节到位操作

时间:2015-01-22 22:18:14

标签: python byte bit-manipulation

我有一个我在Python程序中读取的bmp文件。一旦我读入字节,我想对我读入的每个字节进行逐位操作。我的程序是:

with open("ship.bmp", "rb") as f:
    byte = f.read(1)
    while byte != b"":
        # Do stuff with byte.
        byte = f.read(1)
    print(byte)

输出:

b'\xfe' 

我想知道如何对此进行操作?即将其转换为位。一些通用指针会很好。我缺乏Python经验,所以任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:2)

索引时,

bytes个对象会产生0到255之间的整数。因此,只需对索引结果执行位操作。

3>> b'\xfe'[0]
254
3>> b'\xfe'[0] ^ 0x55
171

答案 1 :(得分:2)

file.read(1)构造一个长度为1个字节的对象,当您希望该字节为整数时,这有点过分。要以整数形式访问每个字节,以下内容将更简洁,并且具有使用for循环的好处。

with open("ship.bmp", "rb") as f:
    byte_data = f.read()

for byte in byte_data:
    # do stuff with byte. eg.
    result = byte & 0x2
    ...