TI中文支持网
TI专业的中文技术问题搜集分享网站

数据结构字节对齐的问题

我使用的是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. 

赞(0)
未经允许不得转载:TI中文支持网 » 数据结构字节对齐的问题
分享到: 更多 (0)