herochenling 2015-09-01 02:23 采纳率: 33.3%
浏览 3272
已结题

c语言中,二进制文件中怎样判断的各个数据的类型

我有一个二进制文件,包含各种数字,stirng char。但是我不知道里面的各个数据的类型,只知道各个数据的名字。然后怎么判断各个数据的类型。(比如 8bit 的 char, 16 bit 的 boolean 之类的)然后再转成要求的数据类型输出(printf)。
我打算先用fread一条一条读取这些文件到结构体数组中,。主要问题是我不知道各个数据的类型,用不了fread!!!
老师给的提示是说,先把二进制文件转成十六进制或其他格式 查看bytes,shorts and 32bit integer,floats, double 和string/char 之类的。 但是我转成十六进制文件后根本就看!不!懂!怎!么!破!啊!!
——————————————————edit——————————————————
我第一次做的问题是,已知二进制文件中的各个数据名字和类型,然后读取到结构体数组中。 第一步我先创建一个结构体:
struct columns{
unsigned int mine;
unsigned short hope;
float bee;
int agreement;
int elbow;
short music;
char drink;
signed int horses;
signed int crib;
double process;
signed char copy;
char ornament[10];
char hand;
short orange;
float hot;
char metal;
unsigned short berry;
};
然后fread 一条一条读取
for(i =0; i< size; i++){
fread(&p[i].mine, sizeof(unsigned int), 1, fp);
fread(&p[i].hope, sizeof(unsigned short), 1, fp);
fread(&p[i].bee, sizeof(float), 1, fp);
fread(&p[i].agreement, sizeof(int), 1, fp);
fread(&p[i].elbow, sizeof(int), 1, fp);
fread(&p[i].music, sizeof(short), 1, fp);
fread(&p[i].drink, sizeof(char), 1, fp);
fread(&p[i].horses, sizeof(signed int), 1, fp);
fread(&p[i].crib, sizeof(signed int), 1, fp);
fread(&p[i].process, sizeof(double), 1, fp);
fread(&p[i].copy, sizeof(signed char), 1, fp);
fread(&p[i].ornament, sizeof(char), 10, fp);
fread(&p[i].hand, sizeof(char), 1, fp);
fread(&p[i].orange, sizeof(short), 1, fp);
fread(&p[i].hot, sizeof(float), 1, fp);
fread(&p[i].metal, sizeof(char), 1, fp);
fread(&p[i].berry, sizeof(unsigned short), 1, fp);
}
最后printf输出,结果:
mine, hope, bee, agreement, elbow, music, drink, horses, crib, process, copy, ornament, hand, orange, hot, metal, berry
1, 4, -1.125000, 1, 1, 1, 1, 65, 232,16.445312, -6, map, 1, 1, 78.483688, =, 18075

**但是二进制文件中的各个数据前面的有符号无符号,int或double之类的都变了,我怎么判断这些,然后我还可以用fread读取到结构体数组中

  • 写回答

3条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2015-09-01 02:29
    关注

    你首先要知道数据结构是怎样的,然后就是从第一个字节开始,按照字段类型读取指定长度的值,如果遇到哪些可变长度的,比如字符串,那么需要增加一个字段,来表示后面字节的长度

    评论

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元