簡體   English   中英

用於流壓縮算法的C ++快速位數組類

[英]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.

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