gpt4 book ai didi

c++ - 按位读取缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:56 26 4
gpt4 key购买 nike

我有一个缓冲区,其中包含一些具有不同位大小的数据(8 位字段,然后是 4 位字段,然后是 9 位字段...)。

我需要阅读它。如果有一些库允许使用位级别而不是字节级别的指针读取它,那就太好了。

将缓冲区复制到结构不是一种选择,因为在研究之后我需要使用 #pragma pack() 或类似的东西,并且不可移植。

有什么想法吗?

编辑:我将尝试用一个例子来解释我的问题的严重性:

field1: 8 bits --> ok, get first byte
field2: 6 bits --> ok, second byte, and a mask
field3: 4 bits --> gets harder, i have to get 2 bytes, apply 2 different masks, and compose
field4
...
field 15: 9 bits ---> No idea of how to do it with a loop to avoid writing manually every single case

我能想到的唯一解决方案是复制到一个结构,pragma pack,然后继续。但我在之前的问题中被告知,由于可移植性,这不是一个好的解决方案。但如果它能拯救我,我愿意听到不同的意见。

最佳答案

使用位操作:

unsigned char[64] byte_data;
size_t pos = 3; //any byte
int value = 0;
int i = 0;
int bits_to_read = 9;
while (bits_to_read) {
if (i > 8) {
++readPos;
i = 0;
}
value |= byte_data[pos] & ( 255 >> (7-i) );
++i;
--bits_to_read;
}

关于c++ - 按位读取缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com