我有一个处理器,以下列方式存储三个10位字 - 位0-7位于一个字节字中,但位8和9与其他三个寄存器中的位8和9组合成一个字。它看起来像这样:
1)XXAABBCC 2)AAAAAAAA 3)BBBBBBBB 4)CCCCCCCC
所以我需要从字1中抓取两位,然后将它们放在相应字2,3或4的前面。如何提取字1中的嵌入位,以及如何将它们连接到另一个8位?
答案 0 :(得分:0)
根据位的存储位置,会有一个相应的位模式,在这些位置具有所有(二进制)模式,并且在其他地方为零。找出该位模式,或该位模式的公式。
例如,如果两个位彼此相邻,并且在您显示的布局中,则位模式可能是A:0x30,B:0xC0,C:0x03。
保持您显示的相同索引,您有1 - > 0x30,2 - > 0xC0,3 - > ×03。由于模式中有两个位,因此可以乘以2:2 - > 0x30,4 - > 0xC0,6 - > 0x03,这使公式类似于0xC0 >> (2*i)
,其中i是索引。
功能可能如下所示:
def extract_10bit_word(code_bytes, i):
"""Extract 10-bit word 'i' from 4-byte package code_bytes, where
words are encoded as 2-bit packets (high bits) in byte 0, plus
8-bit bytes in byte i, which must be [1,3]."""
assert i in range(1, 4)
assert len(code_bytes) == 4
hi_bits = code_bytes[0] & (0xC0 >> (2 * i))
return (hi_bits << 8) | code_bytes[i]