我正在尝试从二进制文件中读取位图。我确认字节正确写入二进制文件。我现在试图打开该二进制文件,读取字节,从这些字节中提取位,并将它们存储在一个数组中。 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.
答案 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()