读取二进制文件时出现问题
Problems reading binary file
我正在尝试读取文件的前 6 个字节,但它给了我奇怪的结果,我似乎无法弄清楚我做错了什么。
我的代码:
struct Block {
char fileSize[3];
char initialDataBlockId[3];
};
int main(int c, char **a) {
ifstream file("C\main_file_cache.idx0", ios::binary);
Block block;
file.get((char*)&block, sizeof(block));
printf("File Size: %in", block.fileSize);
printf("Initial Data Block ID: %in", block.initialDataBlockId);
file.close();
system("pause");
return 0;
}
在运行代码之前,我在二进制编辑器中打开了文件, 它向我展示了这个十六进制代码:
00 00 00 00-00 00 05 af-4b 00 00 01-26 df cd 00
00 6f 03 3f-ed 00 03 61-05 08 35 00-04 8b 01 61
59 00 08 39-03 23 0a 00-05 6c 00 35-d0 00 06 fe
03 69 d8 00-07 19
总共有 54 个字节。前 6 个字节仅为零。
因此,我希望我的程序产生以下输出:
File Size: 0
Initial Data Block ID: 0
相反,输出如下所示:
File Size: 10419128
Initial Data Block ID: 10419131
这个结果毫无意义。也许我的代码有问题?
您应该在Block
结构中使用类型unsigned char
。
您应该使用file.read()
而不是file.get()
来读取二进制数据。
您正在打印Block
结构中数组的地址,而不是它们的内容,此外,说明符%i
期望一个int
,而不是一个char *
,所以行为在未定义中,你会得到一些奇怪的整数值,但任何事情都发生了,包括程序终止。建议提高警告级别,以便编译器警告此类愚蠢的错误。
如果文件格式是小端序,您可以通过以下方式将这 3 字节数组转换为数字:
int block_fileSize = (unsigned char)block.fileSize[0] +
((unsigned char)block.fileSize[1] << 8) +
((unsigned char)block.fileSize[2] << 16);
int block_initialDataBlockId = (unsigned char)block.initialDataBlockId[0] +
((unsigned char)block.initialDataBlockId[1] << 8) +
((unsigned char)block.initialDataBlockId[2] << 16);
printf("File Size: %in", block_fileSize);
printf("Initial Data Block ID: %in", block_initialDataBlockId);
如果要读取二进制数据,可以使用ifstream
中的read
方法,也可以使用ofstream
中的write
方法。
istream & ifstream::read (char * s, streamsize n);
ostream & ofstream::write (const char * s, streamsize n);
您必须知道二进制模式对 UNIX 系统无用,文本模式仅有用。
相关文章:
- 有关在C++中解析二进制文件的问题
- 创建二进制文件时出现问题
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 读取二进制文件时出现问题
- MPI 二进制文件 I/O 基本功能和性能问题
- 快速读取带有数字 c++ 的二进制文件时出现问题
- 通过C 读取二进制文件的问题
- 读取C++中的二进制文件时出现问题
- Wxwidgets 在另一台计算机上运行二进制文件时出现问题
- 读取二进制文件并转换为整数数组时出现问题
- 读取二进制文件时使用的变量的问题
- 使用字符串流处理二进制文件时出现问题
- 将整数写入二进制文件C++时出现问题
- C++三维模型io、二进制文件读取(badbit)和#DEN问题
- 协议缓冲区问题,多个序列化成一个二进制文件
- 试图读取二进制文件c++时的问题
- c++二进制文件读取问题
- c++中二进制文件中读写数组结构的问题
- unix多次并行运行一个C++二进制文件是否存在问题
- C++,序列模式下二进制文件的问题