0

我试图使用 fread 从文件中读取比特流

fread(buff, buffSize, 1, fp);

. buff is the buffer to which i am reading . buffSize is the size of buffer,以及fp is the file pointer我正在阅读的内容。将数据读取到缓冲区后,我尝试将缓冲区内容类型转换为另一个结构变量。结构的形式

typedef struct data
{
    char    id;
    short   value1;
    short   value2;
    ....
}data;

我所做的是

data* var;
var = (data*)buff;

然后我尝试访问结构内的变量,如果比特流是这样00 b0 11 c1 00的话, var->id应该是0x00. var->value1应该是而且0xb011应该var->value20xc100

但我得到的是

var->id = 0x00;
var->value1 = 0x11c1;
...

为什么我没有达到预期的效果?当我将第一个参数类型更改为 short 时,值进入了var->id was 0x00b0. 有没有像最小访问大小这样的东西2 Bytes?如何解决这个问题?我只想读取第一个字节到var->id字段。

4

1 回答 1

2

发生这种情况是因为之前有一个填充字段value1,用于对齐。如果您想摆脱它,请指示您的编译器“打包”该结构。每个编译器都有不同的语法。例如,gcc你会说:

struct  __attribute__ ((__packed__)) data {
    /* ... */
};
于 2013-03-02T19:34:11.050 回答