大家好我有以下功能:
#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/3znmpz。 void const* data
指向我的屏幕截图中用红框表示的部分。 (我的意思是第一个成员是" 00000000"显示在绿色框中)。如果这是必需的信息,我的文件将由little endian编写和显示。
使用此功能,我想在 bitset 位置附加位到我的结果字符串
例如,当extractBit(数据,23)我想在红色框中将第一个1添加到我的结果字符串中但它给了我0.尽管我已经看了几个小时的代码,我可以找不到我的错。有人帮我吗?
答案 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 ......