[英]How to replace/overwrite an arbitrary number of bits in an arbitrary position in an array of short with arbitrary bits from an integer
我有一個要嘗試以以下形式編寫的函數(並且沒有完全找到我要尋找的內容—如果這是一個重復項,請僅將我指向正確的位置—即使它不是int
且short
s,但是用char
s和int
代替,那就可以了):
put_bits(short *array_of_short, int significant_bits, int bit_offset, int integer_to_append)
當我改寫了significant_bits
的integer_to_append
在bit_offset
在array_of_short
。
我想通過僅覆蓋(或按位排序,疊加或替換)位到數組中的位置來完成事情(我不想向數組中添加更多元素或分配更多內存),即可能很容易,但是效率很低,只是跟蹤偏移量轉換為數組中的元素數量,偏移量是否落在短褲的邊界上,以及將整數位移至適當的偏移量或將其移至適當的偏移量短(s)—但這似乎是開銷的負擔,而且計算量超出了我需要的,而不僅僅是將位運算到適當的位置,但是我有點茫然……
因此,例如,我有一個整數,其中將包含任意數量的“有效”位-假設在此示例中有6個。因此,值將為0到63
0000 0000 0000 0000 0000 0000 0000 0000
至
0000 0000 0000 0000 0000 0000 0011 1111
我想將其覆蓋(或按位或此)到任意點的任意大小的short
數組。 所以如果我有
整數:
0000 0000 0000 0000 0000 0000 0010 0001
短數組:
0100 1000 0100 1100 : 1100 0010 0110 0000 : 0000 0000 0000 0000 : 0000 0000 0000 0000
我想在位置42處追加:
0100 1000 0100 1100 : 1100 0010 0110 0000 : 0000 0000 0000 1000 : 0100 0000 0000 0000
如果我完全不在家或者我沒有道理,也請讓我知道。
如果我正確理解了您的問題,您實際上想將您的數組視為位數組。 當然,c中沒有位數組這樣的結構,但是您可以實現它。 這是以int為基本類型的位數組的示例。 您可以采用short作為基本類型的解決方案,然后逐個設置如下:
for( i = 0 ; i< sizeof(int)*8;++i)
{
unsigned int flag = 1;
flag = flag << i;
if( int_num & flag)
SetBit( array_of_short, bit_offset + i );
}
void SetBit( short array_of_short[ ], int k )
{
array_of_short[k/16] |= 1 << (k%16); // Set the bit at the k-th position in array_of_short[i]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.