//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 <stdio.h>
#include <winsock2.h>
#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))
printf("int2_3:%hd\n" ,ntohs(d.int2_3))
printf("int1_3:%d\n" ,d.int1_3)
printf("int4_1:%d\n" ,ntohl(d.int4_1))
printf("int1_4:%d\n"亩陆槐 ,d.int1_4)
printf("int1_5:%d\n" ,d.int1_5)
printf("str_1:%.7s\n" ,d.str_1)
printf("int4_2:%d\n" ,ntohl(d.int4_2))
return 0
}
//ver:1
//resv1:0
//signature:CUC
//type:69
//no:5
//resv2:0
//seq:4
//length:56
//int2_0:1
//int2_1:2
//int1_0:1
//int4_0:30
//int1_1:1
//int1_2:7
//str_0:beijing
//int2_2:1
//int2_3:4
//int1_3:1
//int4_1:60
//int1_4:1
//int1_5:7
//str_1:tianjin
//int4_2:80
//
代码示例
//////////////////////////////////////////////////// /// 说明 : 解析XML文件 返回XML的根节点 /// 参数 : /// : xml xml文件路径 [in] /// : buffer 供解析用的缓冲 [in] /// : buffer_len 缓冲大小(单衫尘位:字节) [in] /// : error_reason 执行出错时保存错误袭塌蠢原因 [in] /// : root XML的根节点 [out] /// 返回 : 成功拍陪 返回 失败返回 /// 说明 : /// : 问 :供解析用的缓冲应该取多大比较合适呢? /// : 答 :供解析用的缓冲主要用来存放XML树 所以 buffer_len >= (XML文件的大小) * 即可 /// :
int mini_parse_xml (char* xml char* buffer int buffer_len char error_reason[ ] MINI_XML_NODE** root)
//////////////////////////////////////////////////// /// 说明 : 查找特定节点的子节点 /// 参数 : /// : father 父结点 [in] /// : name 子孩子节点名 [in] /// : child 子节点 [out]
int mini_find_child (MINI_XML_NODE* father char* name MINI_XML_NODE** child)
//////////////////////////////////////////////////// /// 说明 : 查找特定节点的属性值 /// 参数 : /// : node 节点 [in] /// : name 属性名 [in] /// : value 属性值 [out]
int mini_find_attribute (MINI_XML_NODE* node char* name char** value)
//////////////////////////////////////////////////// /// 说明 : 打印XML树 供调试用 int mini_print_tree (MINI_XML_NODE* root int layer)
#if defined (__cplusplus) || defined (c_plusplus) } #endif #endif
lishixinzhi/Article/program/net/201311/14908
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)