如何用Windows头文件方法读取二进制文件结构体?大整数读取异常求解
结构体序列化与读取的字节解析问题
我要序列化如下结构体:
struct SomeStruct { int a; int b; int c; };
通过Windows头文件实现写入操作的代码如下:
#include "SomeHeader.h" // 结构体定义所在头文件 #include <Windows.h> #include <iostream> FILE* f = fopen("SomeFile.pak", "wb"); SomeStruct data; data.a = 3; data.b = 2; data.c = 5; fwrite(&data, sizeof(SomeStruct), 1, f); fclose(f);
之后用另一种方式读取该结构体的代码:
FILE* f = fopen("SomeFile.pak", "rb"); BYTE* databuffer = NULL; databuffer = new BYTE[sizeof(SomeStruct)]; fread(databuffer, sizeof(SomeStruct), 1, f); SomeStruct data; data.a = databuffer[0]; data.b = databuffer[4]; data.c = databuffer[8]; std::cout << data.a << std::endl; std::cout << data.b << std::endl; std::cout << data.c << std::endl;
控制台正常输出:
3 2 5
我最初的错误是没使用正确的索引(假设结构体成员均为int类型,每个成员的索引需递增4,因为int大小为4字节)。但现在遇到新问题:当int值足够大时,无法正常显示。例如将data.a设为20008,控制台会显示40。我猜测是对二进制及二进制文件知识不足导致的,尝试将索引0-3的内容进行相加、相乘等操作,均未成功。
内容的提问来源于stack exchange,提问作者Harsonist
相关产品推荐
相关产品推荐

