我在可變長度位串上做了一些操作。C:在可變長度位串上的位操作
我定義給出一個函數setBits(char *res, int x, int y)
應該由*res
變量傳遞該位串的工作,一個x
和y
(只提,我想實現像使用每×8位Bloom過濾器):
void setBits(char *res, int x, int y)
{
*res |= x << (y * 8)
}
例如給出以下XY-載體{0,0} ; {0,1} ; {1,2} ; {2,3}
,我希望這樣的比特串(或反之亦然取決於是否little-或大端,但現在並不重要):
0000 0010 0000 0001 0000 0000 0000 0000
所以最低8位應該來自{0,0}
,來自{0,1}
的第二個8位,接下來的8位來自{1,2}
,最後一個來自{2,3}
。
不幸的是,我似乎沒有得到原因,setBits
總是隻返回最後的結果(在這種情況下,即{2,3}
的位串)。我調試了代碼,並意識到*res
總是0 - 但爲什麼?我究竟做錯了什麼?難道我選擇char*
它不起作用,或者我完全錯過了一些非常愚蠢的東西嗎?
哦!所以它真的是'char *'?那我能做些什麼?位串的長度應該是可變的。相反,傳遞'char []'? – navige
是啊,你爲什麼不嘗試'char []'這是一個字節數組,並參見 – noMAD
@navititious對不起,我會努力提供更具體的建議。我不確定你想要實現什麼,也不知道布盧姆過濾器是什麼 – simonc