qq_33460068
qq_33460068
采纳率33.3%
2017-09-14 12:36 阅读 1.1k
已采纳

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

10

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    qq_28249373 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

    点赞 3 评论 复制链接分享
  • what951006 小乌龟在大乌龟背上 2017-09-14 13:21

    name确定是1个字节?还有就是写入的确定正确?好像你是从文件里读取的

    点赞 评论 复制链接分享

相关推荐