读二进制文件的奇怪问题!

bobo2003 2003-09-13 01:29:28
fp = fopen(filepath,"rb");
fread((char*)&BUFF,sizeof(BUFF),1,fp);
把一个二进制文件里的data读到一个构造体里

二进制文件data如下:
(为了看的清楚,字节之间我用","分开,其实","不存在)
01,03,45,12,01,00,00,00,03,02,01,00,00,00,12

构造体如下:
struct BUFF
{
short int AA;
long BB;
short int CC;
long DD;
}

结果如下:
AA=769(没有问题,高位,低位互换,变为十进制)

BB=1(问题就出现在这里,"45,12"这两位莫名其妙就没了)

CC=515(由"03,02"转变而来,没有问题,就是因为BB出了问题,这里已经错位了)

DD=1(这个也没有什么问题,由"01,00,00,00"转换而来)

问题就是出在BB的地方,一路读下来只要碰到占4个字节的(int也是一样)就会先
丢掉2个字节,然后在读4位,而且这种现象只会出现一次,到DD处就没有出现,
如BB是short int的话,问题就会在DD处出现。

迷惑中,请高手帮忙!!!
...全文
84 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo2003 2003-09-16
  • 打赏
  • 举报
回复
出现了新的问题,加了这么一句以后另外一个函数就出问题了
我自己写的一个函数,我把这句话去掉,函数就对了,但读二
进制文件出现了问题,能不能使两边都不出问题啊。请教!!!
idontlikenickname 2003-09-13
  • 打赏
  • 举报
回复


可能是结构体双字对齐的原因~
试试在程序开头加上预编译指令:
#pragma pack(1)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧