当前位置: 技术问答>linux和unix
程序在mini2440上读取bmp文件出错
来源: 互联网 发布时间:2016-08-08
本文导语: 写了一个处理bmp文件的程序,在PC的Linux下运行正常,结果也是对的,但是交叉编译后在mini2440中运行,结果却错了。 最后发现读取bmp文件时就出错了。 在PC下得到的文件信息头各值为: bfType :19778 bfSize :1 bfReserve...
写了一个处理bmp文件的程序,在PC的Linux下运行正常,结果也是对的,但是交叉编译后在mini2440中运行,结果却错了。
最后发现读取bmp文件时就出错了。
在PC下得到的文件信息头各值为:
bfType :19778
bfSize :1
bfReserved1 :0
bfReserved2 :1078
bfOffBits :3435921408
在板子上得到的为:
bfType :19778
bfSize :1
bfReserved1 :0
bfReserved2 :1078
bfOffBits :0
不知道为什么会得到这样的值,怎么才能得到正确的值呢?下面是我的程序:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
BITMAPFILEHEADER bf;
FILE *fp;
fp = fopen(fileName, "rb");
if(fp == NULL)
{
printf("Error opening file unexist.ent:%sn",strerror(errno));
return 1;
}
fread((void *)&bf, 14, 1, fp);
最后发现读取bmp文件时就出错了。
在PC下得到的文件信息头各值为:
bfType :19778
bfSize :1
bfReserved1 :0
bfReserved2 :1078
bfOffBits :3435921408
在板子上得到的为:
bfType :19778
bfSize :1
bfReserved1 :0
bfReserved2 :1078
bfOffBits :0
不知道为什么会得到这样的值,怎么才能得到正确的值呢?下面是我的程序:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
BITMAPFILEHEADER bf;
FILE *fp;
fp = fopen(fileName, "rb");
if(fp == NULL)
{
printf("Error opening file unexist.ent:%sn",strerror(errno));
return 1;
}
fread((void *)&bf, 14, 1, fp);
|
如果是你自己定义的文件头格式,应该是由于结构体对齐的问题。
在结构体前面加上:
#pragma pack(1)
在结构体前面加上:
#pragma pack(1)
|
fread((void *)&bf, 14, 1, fp);
==>
fread((void *)&bf, sizeof(bf), 1, fp);
==>
fread((void *)&bf, sizeof(bf), 1, fp);
|
学习的,虽然也是在玩linux,这方面没搞过,学习