首页 > 解决方案 > 如何在 Python 中读取、操作和写入一系列(少于 8 位)字节数组?

问题描述

我正在寻找一种方法来读取、操作和写入字节数组中特定范围的(少于 8 个)位。

我想要类似的东西,假设我想使用字节数组的第 6-8 位:

R0 = bytearray(8)

bits = readBits(R0, 6, 2) # bytearray, position, range
print(bits) # [0, 0] or maybe it's easier to work with a byte 
# with the irrelevant bits zeroed, you tell me
# do stuff ... XOR, AND, ETC
writeBits(R0, bits, 6) # target, source, position

我正在用 Python 编写一个 x86-64 模拟器,通用寄存器中的一些指令可以引用 64 位寄存器的 2 位段,我一直将其表示为bytearray(8). 字节数组的最小单位似乎是一个字节(见图)。有没有办法选择位?假设我想读取、操作和更新 8 字节对象的第 6-8 位?那看起来像什么?

也许我应该使用更精细的数据结构而不是字节数组?

对使用十六进制字符串的类似问题的一个答案建议:

i = int("140900793d002327", 16)
# getting bit at position 28 (counting from 0 from right)
i >> 28 & 1
# getting bits at position 24-27
bin(i >> 24 & 0b111)

但是这段代码解释得不是很好,例如0b111这里做了什么以及如何动态地使用这种方法来隔离任何所需的位范围,就像我的想象readBits和函数一样writeBits,而不是这里的硬编码功能?

标签: pythonbinary

解决方案


推荐阅读