我有一个 char*
缓冲区,我想将各种位大小(介于 1
和 32
之间)的整数附加到。
因此,我需要一个函数:
void addBits(char *buffer, int bits_appended_so_far, int object, int object_bit_size);
可以将 13
位的对象移动到缓冲区的第 470
位位置。
我当然可以将位一位一位地移到缓冲区中,但速度至关重要,因此看起来应该可以一次移动更大的 block 。有没有标准的方法来做到这一点?似乎应该有一个标准方法,但一些谷歌搜索和 SO 搜索没有给我想要的东西。
最佳答案
这样的事情怎么样:
void addBits(char *buffer, int bits_appended_so_far, int object, int object_bit_size) {
int* int_buffer = reinterpret_cast<int*>(buffer);
const int bits_per_int = 8 * sizeof(int);
int current_int = bits_appended_so_far / bits_per_int;
int current_offset = bits_appended_so_far % bits_per_int;
int_buffer[current_int] |= object << current_offset;
if( current_offset )
int_buffer[current_int+1] |= object >> (bits_per_int - current_offset);
}
这假设 object
只设置了最低有效的 object_bit_size
位,否则您需要添加一个步骤来切掉额外的(不需要的)位。它还假设在开始添加位之前缓冲区已初始化为零。
关于c++ - 将 1 到 32 位数字附加到 char 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346637/