Bitset没有正确提取位

时间:2018-05-02 14:22:32

标签: c++ bitmap file-read

我正在尝试从二进制文件中读取位图。我确认字节正确写入二进制文件。我现在试图打开该二进制文件,读取字节,从这些字节中提取位,并将它们存储在一个数组中。 Bitset适用于第一个字节,但对所有前进字节都不起作用。

void loader::load_inode_map(string filename){
    FILE *fp = fopen(filename.c_str(), "rb+");
    fseek(fp, sb.block_size, SEEK_SET);
    bitset<8> bit;
    char c;

    int count = 0;
    for(int i = 0; i < 32; i++){
        fread(&c, 1, 1, fp);
        bit = c;
        cout << "---new byte---" << endl;
        for (int j = 7; j >= 0; j--){
            cout << bit[j] << endl;
            inode_map[count] = bit[j];
            count++;
        }
    }
    fclose(fp);
}

为了测试这个函数的功能,我将所有位设置为1.这打印出第一个字节,但所有字节后缀只打印出0.我做错了什么?

Output:
---new byte---
1
1
1
1
1
1
1
1
---new byte---
0
0
0
0
0
0
0
0
---new byte---
0
0
0
0
0
0
0
0
...and so on.

1 个答案:

答案 0 :(得分:0)

我认为问题的根源是if (fread(&c, 1, 1, fp) != 1) { /* error! */ }失败。

尝试检查它的返回值:

std::ifstream

您还应该考虑使用std::ifstream file(filename, std::ios::binary); file.seekg(sb.block_size); if (!file.good()) { /* error! */ } file.read(&c, 1); ,否则您很容易泄露资源。

以下是您需要的方法:

FillData()