从比特序列c ++中提取一点

时间:2014-07-05 15:52:49

标签: c++ bit-manipulation

大家好我有以下功能:

#define GET_BIT(p, n) ((((unsigned char *)p)[n/8] >> (n%8)) & 0x01)

void extractBit(void const * data, int bitIndex)
{
    string  result = "";
        result.append(std::to_string(GET_BIT(data, bitIndex)));      
}

以下链接显示void const* data指针指向的位:http://prntscr.com/3znmpzvoid const* data指向我的屏幕截图中用红框表示的部分。 (我的意思是第一个成员是" 00000000"显示在绿色框中)。如果这是必需的信息,我的文件将由little endian编写和显示。

使用此功能,我想在 bitset 位置附加位到我的结果字符串

例如,当extractBit(数据,23)我想在红色框中将第一个1添加到我的结果字符串中但它给了我0.尽管我已经看了几个小时的代码,我可以找不到我的错。有人帮我吗?

1 个答案:

答案 0 :(得分:0)

第一个' 1'不是第23位,它是第16位。 好吧,如果你只是从左到右计数,它可能看起来像23。但这不是你的功能如何运作。

在一个字节中,你从右到左枚举位(第0位是最右边的位,第7位是最左边的,这是一个常见的约定,应该没问题。)

因此,您的函数所见的位数为:

7 6 5 4 3 2 1 0 | 15 14 13 12 11 10 9 8 | 23 22 21 20 19 18 17 16 | 31 30 ......