打包八位字节串

可能重复:
填充一个八位字符串

我有65个不同位长的参数,我需要填写一个八位字节串。 参数化将以八位字节串连续填充。 例如,假设第一个参数是1位长,那么它将在八位字节串的第一个八位位组的第0位填充。 现在第二个参数假设为9位长。 因此,该参数的前7位将填充在相​​同的八位位组中,接下来的2位应该位于下一个八位位组的第0位和第1位位置。 类似地,其他参数将填充在八位字节串中。 我试着编写一个函数,在这里我传递指向当前八位字节的指针,位位置和源指针,数据将被复制到这里。 但我发现逻辑实现有困难。 我尝试了很多逻辑(位操作,位移,旋转等),但无法得到正确的逻辑。 如果有人能在“C”中给我一个逻辑/function,我将不胜感激。 您也可以使用不同的函数原型。

这被称为“比特流”,并且在例如低级网络协议中相当普遍。

如果你的参数有一个合理的上限,例如32位,你应该考虑实现类似的东西:

void bitstream_append(uint32_t value, uint8_t bits); 

它会将最右边的位附加到流中。 如果你已经有bitstream_append_bit(bool bit); ,那么考虑如何实现它可能会有所帮助bitstream_append_bit(bool bit);