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

将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 微信购物商城购物车的所有功能以及购物车,和首页的搜索功能
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!