从"m"字节数中获取"n"位数



我在从特定字节中提取特定数量的位时遇到问题。假设我们有这样的案例:

(我假设我从0开始计算字节/位(我从流中接收3个字节,并想读取从第一个字节的第7位开始的11位:在第二个字节的5位结束,我想将其存储在的某个地方

一些可视化:

0th byte          1st byte         2nd byte
|7|6|5|4|3|2|1|0|#|7|6|5|4|3|2|1|0|#|7|6|5|4|3|2|1|0|
^ ^ ^ ^ ^ ^ ^ ^   ^ ^ ^

我知道比特转换是一个方向,但我在这个话题上缺乏经验,我真的很好奇经验丰富的开发人员的意见

编辑:很抱歉之前没有指定它-语言是C++,但我不能使用像"位集";。

";n〃;以及";m〃;可以是任何数字,例如:n=17m=5。另一个假设是数据需要是连续的——这意味着最终我需要11位连续的数据。

我想做的是这样的事情:

buf[0] << ((byteCount - 1) - index) * stepWidth;

这给了我完整的第一个/第二个字节。最后读取的比特应该是"0";合并的";作为一个变量,有点像:

int buf[1] = variable with 8 bits;
int buf[2] = variable with 3 bits;
mergedBuf  = buf[1] + buf[1] // "+" means merging, not adding values

C++在标准库中有一个不错的类:

https://www.cplusplus.com/reference/bitset/bitset/

如果是C,则可以使用位掩码和&(和(操作。类似:

unsigned char buf[3]; // let's say this is your buffer;
int _2nd_byte_value = buf[1] & 0xFF; // since you want to get all bits of 2nd byte;
int _3rd_byte_value = (buf[2] & 0xE0) >> 5; // first mask then shift; 

然后,您可以随心所欲地操纵这些值。

相关内容

  • 没有找到相关文章

最新更新