python - 如何在 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
,而不是这里的硬编码功能?
解决方案
推荐阅读
- strawberry-perl - 如何为 IIS 设置 Strawberry Perl v5.30 ISAPI 支持
- java - 奇怪的 NPE:实例方法内的原始字段 null
- r - 将来自闪亮的 BrushedPoints() 的输入转换为数据框
- angular - Angular - 如何将 httpClient.request() 收到的对象映射到 Angular 中的接口
- sas - 提供类概率统计的 SAS Action
- flutter - FLUTTER FIRST RUN:构建失败并出现异常
- c# - HTTP 客户端在集成测试中不重定向
- sql-server - SSIS Power Query 源 OData 连接不工作
- performance - Azure WebApp 到 WebApp 调用 - 我们可以将其设为私有吗?
- typescript - 打字稿类型在传播后丢失