我使用的是C6678,想读取bmp文件.
bmp文件头的大小一个14,另一个是40,但是由于字节对齐的原因,读取时变成了16和40,这样对应结构体中的内容就完全不对了。
请问应该如何避免这个问题呢?
如何得到正确的bmp文件的头信息呢?
谢谢!~
Jane Lu:
可否将读取数据的代码以及相关结构体的定义贴上了看一下? 主要是看一下数据的类型定义以及读取用的变量类型。
wumengtiankuo zhou:
回复 Jane Lu:
谢谢Jane。
关于bmp文件头的结构体是这样的:
typedef struct BMP_file
{
WORD bfType;
DWORD bfSize;
WORD Reserved1;
WORD Reserved2;
DWORD bfOffset;
} bitmapfile;
该结构体大小按照每个变量累加是14,取sizeof后,是16.
在应用时,定义结构体:
bitmapfile bmphead;
打算用fread读取文件。
如果读取方式是:fread(&bmphead, sizeof(bmphead), 1, fp);这样会直接影响后续的字节。
如果读取方式是:fread(&bmphead, 14, 1, fp);后续的字节没有问题,但是这个bmphead里面的内容除了第一个变量,其他都不对。
Jane Lu:
回复 wumengtiankuo zhou:
您好,请在bitmapfile结构体定义之前,加#pragma pack(2)试试,能否解决问题。
#pragma pack(n) 这个功能需要用cgtools7.4之后的编译器版本。
This pragma can be used to control the alignment of fields within a
class type. Supported subtargets are C64x, C64+, C6600, and C6740. The basic
syntax supported is as follows:
#pragma pack(n)
This pragma will affect following declaration until next pack(n) exists, forcing the
maximum alignment of each field to be the value represented by n. Valid
values for n are 1, 2, 4, 8, and 16 bytes.
TI中文支持网