qq_33460068 2017-09-14 12:36 采纳率: 0%
浏览 1196
已采纳

将16进制数据写入结构体时,遇到double型出错

我定义了一个结构体
struct RAW
{
int size;
double time;
int size2;
char name;
}PingHeader;
想用结构体对齐,直接读取到PingHeader中。
infile.read((char*)&PingHeader,sizeof(PingHeader));
但是转换成double是就会出错,当把double注释掉是就可以按照类型大小一一次赋值了。是在搞不懂了,希望大哥指点指点

  • 写回答

2条回答 默认 最新

  • shifenglv 2017-09-14 13:29
    关注

    结构体有有字节对齐,因此,sizeof(PingHeader)=24,大于结构体各成员宽度之和(17),字节是不对应的。int size 从第一个字节开始到第四个字节,第五个字节到第八个字节是空的,double time事实上是从第9个字节开始的,而不是从第5个字节开始。结构体的字节对齐,默认是以最大的成员字节数为基准,比如,你这里的字节对齐就是8字节。当然,你可以自己设定结构体字节对齐值,如果设置字节对齐为1字节的话,sizeof(PingHeader)就等于17了。修改方法是:在程序开头加上预处理命令#pragma pack(1)。想了解更多结构占用空间大小,可以参考http://blog.csdn.net/qq_28249373/article/details/76784475

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站