存储部分字节数,但不是从开始?

时间:2014-01-17 19:01:36

标签: c++

我有一个字节: A :0 B :0 C :0 D :0 E :0 F :0 G :0 H :0

我想以最快的方式存储0-31中的数字,仅使用字符C,D,E,F,G的空格。 换句话说,我想将第1位和第2位留空,使用第3-7位存储数字并将第8位清空。

我可以使用c |= 1 << n;设置一个字节的n位但是我不明白如何从pos 2开始?

2 个答案:

答案 0 :(得分:2)

a = theNumber
//Skip two bytes
a *= 4
//clean bytes 1,2 and 8 (124 in binary = 0111100)
a = a & 124

答案 1 :(得分:2)

假设您对可读字符的ASCII范围(32-126)感兴趣,则不会有5位的有效范围来满足所需的编码。例如:

~ (126)     = 01111110
(Your Mask) = 01111100

因此,~(126)与|(124)相同。

如果您已经以某种方式调整了编码并且可以确保只有低5位的数据,那么您可以简单地使用按位运算:

unsigned char a = your_data;
a = (a & 0x1F) << 2; // shift the lower 5 bits over 2 bits