You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:03