簡體   English   中英

從字節中提取和拼接位

[英]Extracting and splicing Bits from Byte

我有一個以以下方式存儲三個10位字的處理器-0-7位在一個字節字中,但是位8和9與來自其他三個寄存器的位8和9組合成一個字。 看起來像這樣:

1)XXAABBCC 2)AAAAAAAA 3)BBBBBBBB 4)CCCCCCCC

因此,我需要從單詞1中抓取兩個位,然后將它們放在相應的單詞2、3或4的前面。如何提取單詞1中的嵌入位,以及如何將它們與其他8位連接起來?

根據位的存儲位置,將有一個相應的位模式 ,在這些位置中所有(二進制)為1,而在其他位置為零。 找出該位模式或該位模式的公式。

例如,如果兩個位彼此相鄰,並且在您顯示的布局中,則位模式可能是A:0x30,B:0xC0,C:0x03。

保持顯示的相同索引,您將獲得1-> 0x30、2-> 0xC0、3-> 0x03。 由於模式中有兩位,因此可以乘以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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM