我试图使用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
。
将数据读入缓冲区后,
我试图将缓冲区内容强制转换为另一个strutsure varible。结构的形式为
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->value2
应为0xc100
但我得到的是
var->id = 0x00;
var->value1 = 0x11c1;
...
为什么我没有达到预期的效果?
当我将第一个param类型更改为short时,值为var->id was 0x00b0
。
最小访问权限大小是2 Bytes
吗?
如何解决这个问题?
我只想阅读第一个字节到var->id
字段。
答案 0 :(得分:2)
这是因为在value1
之前有一个padding field,用于对齐。如果你想摆脱它,请指示你的编译器“打包”结构。每个编译器都有不同的语法例如,在gcc
上,您会说:
struct __attribute__ ((__packed__)) data {
/* ... */
};