[疑问]C语言结构体(包含不同类型)保存到文件的问题

Cplusplus
newbie
初来炸道
初来炸道
帖子: 2
注册时间: 2016年10月20日 21:57
拥有现金: 锁定
联系:

[疑问]C语言结构体(包含不同类型)保存到文件的问题

帖子 #1 newbie » 2016年10月20日 22:04

比如有个结构体是这样的

代码: 全选

#include <stdio.h>

struct myst {
    short i;
    long c;
    short j;
};
 
int main(void) {
    FILE *fp;
    fp = fopen("test.txt", "wb");

    struct myst ins = {0xaa, 0xbb, 0xcc};

    printf("size:%d\n", sizeof(ins));
    fwrite(&ins, sizeof(ins), 1, fp);
    fclose(fp);
    return 0;
}


但是写出的文本用十六进制查看却是这样的
aa00 4800 bb00 0000 cc00 0000

其中 4800 可能变成其他数值。

头像
paktc
渐入佳境
渐入佳境
帖子: 52
注册时间: 2016年07月21日 20:34
拥有现金: 锁定
储蓄: 锁定
Has thanked: 6 times
Been thanked: 5 times
联系:

Re: [疑问]C语言结构体(包含不同类型)保存到文件的问题

帖子 #2 paktc » 2016年10月24日 23:27

参考链接: http://www.cplusplus.com/forum/beginner/32688/

Shredded 写了:to pack your structure into 18 bytes you will need to use the pragma pack statements
Code: [全选] [展开/收缩] [Download] (Untitled.cpp)
  1. #pragma pack(push, 1)
  2.  
  3. typedef struct hd_fileheader
  4. {
  5.     unsigned long long magic;
  6.     unsigned short hdata_version;
  7.     key_num next_key_num;
  8. }
  9.  
  10. #pragma pack(pop)


The value of magic is reversed because of the way the computer stores integers. etc.
look up
Little Endian
if you want to find out why.

Hope this has been helpful
Shredded



回到 “C/C++”

在线用户

用户浏览此论坛: 没有注册用户 和 1 访客