怎么用c语言解析二进制文件
我的文本文件是:
ver:1
resv1:0
signature:CUC
type:69
no:5
resv2:0
seq:4
length:56
int2,1
int2,2
int1,1
int4,30
int1,1
int1,7
str,beijing
int2,1
int2,4
int1,1
int4,60
int1,1
int1,7
str,tianjin
int4,80
二进制文件是:
00000000h: 01 43 55 43 45 00 05 00 00 00 00 04 00 00 00 38
00000010h: 00 01 00 02 01 00 00 00 1E 01 07 62 65 69 6A 69
00000020h: 6E 67 00 01 00 04 01 00 00 00 3C 01 07 74 69 61
00000030h: 6E 6A 69 6E 00 00 00 50
这怎么用c语言读取二进制文本的数据。。
给个思路啥的~~~
解析二进制文件
分享到:
更多
------解决方案--------------------
//ver:1
//resv1:0
//signature:CUC
//type:69
//no:5
//resv2:0
//seq:4
//length:56
//int2,1
//int2,2
//int1,1
//int4,30
//int1,1
//int1,7
//str,beijing
//int2,1
//int2,4
//int1,1
//int4,60
//int1,1
//int1,7
//str,tianjin
//int4,80
//二进制文件b.bin是:
//00000000h: 01 43 55 43 45 00 05 00 00 00 00 04 00 00 00 38
//00000010h: 00 01 00 02 01 00 00 00 1E 01 07 62 65 69 6A 69
//00000020h: 6E 67 00 01 00 04 01 00 00 00 3C 01 07 74 69 61
//00000030h: 6E 6A 69 6E 00 00 00 50
#pragma comment(lib,"ws2_32")
#include
#include
#pragma pack(push,1)
struct _D {
char ver;
// char resv1;
char signature[3];
char type;
short no;
char resv2;
int seq;
int length;
short int2_0;
short int2_1;
char int1_0;
int int4_0;
char int1_1;
char int1_2;
char str_0[7];
short int2_2;
short int2_3;
char int1_3;
int int4_1;
char int1_4;
char int1_5;
char str_1[7];
int int4_2;
} d;
#pragma pack(pop)
FILE *f;
int main() {
f=fopen("b.bin","rb");
if (NULL==f) {
printf("Can not open file b.bin!\n");
return 1;
}
fread(&d,sizeof(struct _D),1,f);
fclose(f);
printf("ver:%d\n" ,d.ver);
printf("resv1:0\n");
printf("signature:%.3s\n",d.signature);
printf("type:%d\n" ,d.type);
printf("no:%hd\n" ,ntohs(d.no));
printf("resv2:%d\n" ,d.resv2);
printf("seq:%d\n" ,ntohl(d.seq));
printf("length:%d\n" ,ntohl(d.length));
printf("int2_0:%hd\n" ,ntohs(d.int2_0));
printf("int2_1:%hd\n" ,ntohs(d.int2_1));
printf("int1_0:%d\n" ,d.int1_0);
printf("int4_0:%d\n" ,ntohl(d.int4_0));
printf("int1_1:%d\n" ,d.int1_1);
printf("int1_2:%d\n" ,d.int1_2);
printf("str_0:%.7s\n" ,d.str_0);
printf("int2_2:%hd\n" ,ntohs(d.int2_2));