我从网上下了一个程序,想自己照着做一个。下载的程序中定义了以下结构体:
struct MAIN_RECORD_HEAD
{
int id;
char version[4];
int hea_length;
int data_length;
char save1[16];
char test_name[30];
char record[30];
char save2[6];
char set_file_name[30];
char set_file_create_date[30];
char set_file_edit_date[30];
unsigned short set_block_number;
int set_file_length; int data_number;
char syssave[40];
STEAM_IDENT_ stream_[16];
};
而结构STEAM_IDENT_的定义如下:
struct STEAM_IDENT_
{
short a;
short b;
char x[1020];
}
我的程序自己建立工程,然后拷贝了人家的代码。这时问题来了,人家代码中语句:sizeof(MAIN_RECORD_HEAD)的值为16622。而为什么我的代码中语句sizeof(MAIN_RECORD_HEAD)的值为16624?
我算过,4+4+4+4+16+30+30+6+30+30+30+2+4+4+40+16*1024=16622。我在网上查了一下,sizeof存在内存对齐,但是为什么人家的代码没有对齐呢?结果导致将二进制文件读入结构体时出现错误。
百思不得其解。请教各位大虾!
struct MAIN_RECORD_HEAD
{
int id;
char version[4];
int hea_length;
int data_length;
char save1[16];
char test_name[30];
char record[30];
char save2[6];
char set_file_name[30];
char set_file_create_date[30];
char set_file_edit_date[30];
unsigned short set_block_number;
int set_file_length; int data_number;
char syssave[40];
STEAM_IDENT_ stream_[16];
};
而结构STEAM_IDENT_的定义如下:
struct STEAM_IDENT_
{
short a;
short b;
char x[1020];
}
我的程序自己建立工程,然后拷贝了人家的代码。这时问题来了,人家代码中语句:sizeof(MAIN_RECORD_HEAD)的值为16622。而为什么我的代码中语句sizeof(MAIN_RECORD_HEAD)的值为16624?
我算过,4+4+4+4+16+30+30+6+30+30+30+2+4+4+40+16*1024=16622。我在网上查了一下,sizeof存在内存对齐,但是为什么人家的代码没有对齐呢?结果导致将二进制文件读入结构体时出现错误。
百思不得其解。请教各位大虾!
解决方案 »
- 【新手求助】请问在列表框中如何获取家庭网络连接然后对其操作
- 请教关于fwprintf输出的问题
- 0x7c00133d 处未处理的异常:0xC0000005: 写入位置 0x06208000 时发生访问冲突
- 比__int64更大的数字该怎么计算?
- 求帮助!如何从一个com的dll获知它的接口声明呢,相当于头文件??
- C++/VC/MFC 学习交流群:31761897 马上满200人了
- 如何控制显示CPropertySheet中Next按钮的?
- com的调试问题!
- 如何将字符串"20.0E6"转换为数字?
- 为什么,我的vc++6的函数参数自动提醒功能总是失效,有没有好的解决办法
- 全屏录制功能问题(sdk)
- 拜托各位了:网络监控
定义数据结构按字节对齐