[英]C++ fast bit array class for streaming compression algorithms
實現流壓縮算法時,通常需要具有以下功能的超快FIFO位容器類:
AddBits(UINT n, UINT nBits); // Add lower nBits bits of n
GetBitCount(); // Get the number of bits currently stored
GetBits(BYTE* n, UINT nBits); // Extract n Bits, and remove them
位數限制在相對較小的大小(“數據包”大小或更小)內。
我正在尋找實現此功能的小型C ++類。
是的,我可以寫一個(並且知道怎么做),但是可能有人已經寫了……
注意:我不想為此添加boost / every-big-lib。
當我一直想一次讀取16位或更少的內容時,我在嵌入式系統中使用的一種方法是保持32位長,其中包含當前的部分16位字,以及下一個完整的字。 然后代碼是這樣的:
/* ui=unsigned 16-bit ul=unsigned 32-bit LT == less-than SHL = shift-left */ ul bit_buff; ui buff_count; ui *bit_src; unsigned int readbits(int numbits) { if (buff_count LT numbits) { bit_buff |= ((ul)(*bit_src++)) SHL buff_ct; buff_ct += 16; } buff_ct -= numbits; return bit_buff & ((1 SHL numbits)-1); }
可以很容易地將其適配為與64位長的long一起使用,並允許一次最多提取32位。
我知道您不想這么做,但是您可以使用增強型動態位集並使用供應商/消費者語義在其之上提供FIFO功能。
我也不想使用升壓,但這確實沒什么大不了的。 您無需對庫做任何事情。 您只需要在構建系統上使用增強功能,並包含正確的包含文件即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.