将1到32位数字追加到char缓冲区

我有一个“ 0”缓冲区,我想在上面附加各种位大小(在“ 1”和“ 2”之间)的整数。 因此,我需要一个函数:
void addBits(char *buffer, int bits_appended_so_far, int object, int object_bit_size);
可以将“ 4”位的对象移动到缓冲区的“第5”位位置。 我当然可以将这些位一一地移到缓冲区中,但是速度至关重要,因此似乎应该可以一次移动更大的块。是否有标准方法可以做到这一点?似乎应该有一个标准方法,但是使用谷歌搜索和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
仅设置了最低有效的set8ѭ位,否则,您需要添加一个步骤以截去多余的(不需要的)位。它还假定在开始添加位之前将缓冲区初始化为零。     
         使用shift在32位int中正确对齐位。 查找字节在缓冲区中的位置。 如果需要保留缓冲区的内容,请创建一个指向相关字节的int指针,然后按位|将32位int插入该位置。 如果不需要保留内容,则只需memcpy(buffer location,32-bit int);     
        最简单的解决方案似乎是使用基本的memcpy并在位置未按字节对齐的情况下适当移位     
        标准字长取决于CPU的1,2,4,8和16字节,因此您一次只能移位8,16,32,64或128位。没有标准方法! 如果您不打算比我的建议保留更多的存储空间,则请以最小单位使用一个字节而不是一个位,以避免移位和加速功能。 编辑: 如果内存是优先级,并且位大小在1到32之间,则仍然没有问题,因为大多数CPU一次支持超过1位的移位。 在x86下,如果使用32位寄存器,则一次最多可以转换32位。     

要回复问题请先登录注册