user-0 提问: 用C语言读取文件指定的数据，并将数据存入bin文件中

回复:
user: user-1
content: 重点是学习渔夫怎么织网。

user: user-0
content: 引用 15 楼 zhao4zhong1 的回复:// 已知 // 文件A.inc: // B_cat       equ 0x0000 // B_dog       equ 0x0001 // B_tiger     equ 0x0002 // B_sleep     equ 0x0003 // B_Bird02    equ 0x0004 // 文件B.inc: // W_train     equ 0x0000 // W_bus200    equ 0x0001 // W_CAR       equ 0x0002 // W_Plane3000 equ 0x0003 // 文件C.inc: // M_guitar    equ 0x0000 // M_piano     equ 0x0001 // M_Saxophone equ 0x0002 // M_VIOLIN    equ 0x0003 // 文件1.txt: // equ_0001 = B_tiger+W_train+200+M_Saxophone+M_VIOLIN+FFH // 期望 // 文件2.bin: //  B_tiger        01 00 02 // +W_train        02 00 00 // +200            04 00 C8 // +M_Saxophone    03 00 02 // +M_VIOLIN       03 00 03 // +FFH            FF #include <stdio.h> #include <string.h> #define MAXNAML 32   //name最多字符数+1 #define MAXLEN  1024 //一行最多字符数+2 #define MAXITEM 1000 //所有inc文件总行数最大值 FILE *f,*fo; struct _NV {     char nam[MAXNAML];     int v; } nv[MAXITEM]; int i,t,h,r,n; char ln[MAXLEN],nm[MAXNAML],*p; unsigned short s; int main() {     i=0;     f=fopen("a.inc","r");     if (NULL==f) {         printf("Can not open file a.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at a.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      f=fopen("b.inc","r");     if (NULL==f) {         printf("Can not open file b.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at b.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      f=fopen("c.inc","r");     if (NULL==f) {         printf("Can not open file c.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at c.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      t=i;     f=fopen("1.txt","r");     if (NULL==f) {         printf("Can not open file 1.txt!\n");         return 1;     }     fo=fopen("2.bin","wb");     if (NULL==fo) {         fclose(f);         printf("Can not create file 2.bin!\n");         return 1;     }      h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at 1.txt Line %d:%s",h,ln);             fclose(fo);             fclose(f);             return 1;         }         p+=2;         while (1) {             r=sscanf(p,"%31[^+\n]%*c%n",nm,&n);             if (r!=1) break;             if (0==strcmp(nm,"FFH")) {                 fputc(0xFF,fo);                 break;             }             if (1==sscanf(nm,"%hu",&s)) {                 fputc(0x04,fo);                 fputc(((char *)&s)[1],fo);                 fputc(((char *)&s)[0],fo);                 p+=n;             } else {                 for (i=0;i<t;i++) {                     if (0==strcmp(nv[i].nam,nm)) {                         switch (nm[0]) {                             case 'B':fputc(0x01,fo);break;                             case 'W':fputc(0x02,fo);break;                             case 'M':fputc(0x03,fo);break;                             default:                                 printf("Format Error at 1.txt Line %d:%s",h,ln);                                 fclose(fo);                                 fclose(f);                                 return 1;                             break;                         }                         fputc(((char *)&nv[i].v)[1],fo);                         fputc(((char *)&nv[i].v)[0],fo);                         break;                     }                 }                 if (i>=t) {                     printf("Format Error at 1.txt Line %d:%s",h,ln);                     fclose(fo);                     fclose(f);                     return 1;                 }                 p+=n;             }         }     }      fclose(fo);     fclose(f);     return 0; } 赵老师，帖子结贴了没看到你的回复，那个问题，我自己已经解决了。现在才看到你的回复，不过还是感谢你给的提示！！

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:letter02+letter01要这样存放： 02 00 01 00 这叫先存放低字节。 #include <stdio.h> #include <string.h> #define MAXDATA 6 #define MAXLEN 1024 FILE *fi,*fo,*fa; char ln[MAXLEN],*p; int n,r,i,h; unsigned short b[MAXDATA]; int addr; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     fa=fopen("addr.bin","wb");     addr=0;     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF || r==0) break;             }             }         }         n=i;         if (1) {//先低字节，将(1)改为(0)即可改用下面的“先高字节”             fwrite(&addr,1,3,fa);             fwrite(b,sizeof(unsigned short),n,fo);         } else {//先高字节             fputc(((char *)&addr)[2],fa);             fputc(((char *)&addr)[1],fa);             fputc(((char *)&addr)[0],fa);             for (i=0;i<n;i++) {                 fputc(((char *)&b[i])[1],fo);                 fputc(((char *)&b[i])[0],fo);             }         }         addr+=sizeof(unsigned short)*i;     }     fclose(fa);     fclose(fo);     fclose(fi);     return 0; }  赵老师，如果“letter”不是固定的字符串呢，而是要根据.inc文件中的定义。例如：文件A、B、C是三个.inc文件 A.inc  B_cat			equ	0x0000 B_dog			equ	0x0001 B_tiger			equ	0x0002 B_sleep			equ	0x0003 B_Bird02		equ	0x0004  B.inc  W_train				equ	0x0000 W_bus200            equ	0x0001 W_CAR               equ	0x0002 W_Plane3000         equ	0x0003  C.inc  M_guitar	    equ	0x0000 M_piano             equ	0x0001 M_Saxophone         equ	0x0002 M_VIOLIN            equ	0x0003  .txt文件为：   equ_0001 = B_tiger+W_train+200+M_Saxophone+M_VIOLIN+FFH 其中B_ W_ M_ 要存放一个Byte表示类型。 分别用01 02 03 表示 纯数字200用04表示类型  最后的FF用一个byte存放 数据存储应该为：01 00 02 02 00 00 04 00 C8 03 00 02 03 00 03 FF 赵老师，拜托了。 还有谢谢你一直的解惑，哈哈！！

user: user-1
content: // 已知 // 文件A.inc: // B_cat       equ 0x0000 // B_dog       equ 0x0001 // B_tiger     equ 0x0002 // B_sleep     equ 0x0003 // B_Bird02    equ 0x0004 // 文件B.inc: // W_train     equ 0x0000 // W_bus200    equ 0x0001 // W_CAR       equ 0x0002 // W_Plane3000 equ 0x0003 // 文件C.inc: // M_guitar    equ 0x0000 // M_piano     equ 0x0001 // M_Saxophone equ 0x0002 // M_VIOLIN    equ 0x0003 // 文件1.txt: // equ_0001 = B_tiger+W_train+200+M_Saxophone+M_VIOLIN+FFH // 期望 // 文件2.bin: //  B_tiger        01 00 02 // +W_train        02 00 00 // +200            04 00 C8 // +M_Saxophone    03 00 02 // +M_VIOLIN       03 00 03 // +FFH            FF #include <stdio.h> #include <string.h> #define MAXNAML 32   //name最多字符数+1 #define MAXLEN  1024 //一行最多字符数+2 #define MAXITEM 1000 //所有inc文件总行数最大值 FILE *f,*fo; struct _NV {     char nam[MAXNAML];     int v; } nv[MAXITEM]; int i,t,h,r,n; char ln[MAXLEN],nm[MAXNAML],*p; unsigned short s; int main() {     i=0;     f=fopen("a.inc","r");     if (NULL==f) {         printf("Can not open file a.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at a.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      f=fopen("b.inc","r");     if (NULL==f) {         printf("Can not open file b.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at b.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      f=fopen("c.inc","r");     if (NULL==f) {         printf("Can not open file c.inc!\n");         return 1;     }     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         if (2==sscanf(ln,"%31s%*s%i",nv[i].nam,&nv[i].v)) {             i++;             if (i>=MAXITEM) {                 fclose(f);                 printf("Too many items,>=%d",MAXITEM);                 return 1;             }         } else {             fclose(f);             printf("Format Error at c.inc Line %d:%s",h,ln);             return 1;         }     }     fclose(f);      t=i;     f=fopen("1.txt","r");     if (NULL==f) {         printf("Can not open file 1.txt!\n");         return 1;     }     fo=fopen("2.bin","wb");     if (NULL==fo) {         fclose(f);         printf("Can not create file 2.bin!\n");         return 1;     }      h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         h++;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at 1.txt Line %d:%s",h,ln);             fclose(fo);             fclose(f);             return 1;         }         p+=2;         while (1) {             r=sscanf(p,"%31[^+\n]%*c%n",nm,&n);             if (r!=1) break;             if (0==strcmp(nm,"FFH")) {                 fputc(0xFF,fo);                 break;             }             if (1==sscanf(nm,"%hu",&s)) {                 fputc(0x04,fo);                 fputc(((char *)&s)[1],fo);                 fputc(((char *)&s)[0],fo);                 p+=n;             } else {                 for (i=0;i<t;i++) {                     if (0==strcmp(nv[i].nam,nm)) {                         switch (nm[0]) {                             case 'B':fputc(0x01,fo);break;                             case 'W':fputc(0x02,fo);break;                             case 'M':fputc(0x03,fo);break;                             default:                                 printf("Format Error at 1.txt Line %d:%s",h,ln);                                 fclose(fo);                                 fclose(f);                                 return 1;                             break;                         }                         fputc(((char *)&nv[i].v)[1],fo);                         fputc(((char *)&nv[i].v)[0],fo);                         break;                     }                 }                 if (i>=t) {                     printf("Format Error at 1.txt Line %d:%s",h,ln);                     fclose(fo);                     fclose(f);                     return 1;                 }                 p+=n;             }         }     }      fclose(fo);     fclose(f);     return 0; }

user: user-1
content: 如果你2.txt的每行长度都一样的话，没必要另弄文件保存每项的起始地址，只需计算 第n（n=0..counts-1）项的起始地址=n*12即n*0x0000000C

user: user-0
content: 引用 7 楼 tanqiyingk 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 没必要读文件三1.inc，只要它的每行内容符合letter（0～32767） equ 0x0～0x7FFF嗯，明白了！现在我要再生成一个bin文件来保存地址： 例如：equ_0001 = letter00+letter00+200+letter00+letter00+FFFFH       equ_0002 = letter00+letter00+200+letter00+letter00+FFFFH 生成bin文件的数据如图：  我还需要生成一个bin文件来存放地址。  equ_0001 地址为 000000   equ_0002 地址为 00000c   那么另外一个bin存放数据的格式为： 00 00 00 00 00 0C 赵老师那么这样要怎么处理。[/quote] 对了，存放地址的bin用3个byte存放.

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:没必要读文件三1.inc，只要它的每行内容符合letter（0～32767） equ 0x0～0x7FFF嗯，明白了！现在我要再生成一个bin文件来保存地址： 例如：equ_0001 = letter00+letter00+200+letter00+letter00+FFFFH       equ_0002 = letter00+letter00+200+letter00+letter00+FFFFH 生成bin文件的数据如图：  我还需要生成一个bin文件来存放地址。  equ_0001 地址为 000000   equ_0002 地址为 00000c   那么另外一个bin存放数据的格式为： 00 00 00 00 00 0C 赵老师那么这样要怎么处理。

user: user-1
content: 没必要读文件三1.inc，只要它的每行内容符合letter（0～32767） equ 0x0～0x7FFF

user: user-1
content: 没必要读文件三1.inc，只要它的每行内容符合letter（1～32767） equ 0x0～0x7FFF  如果letter后面有超过2个数字，将第22行 r=sscanf(p,"letter%2hd+%n",&b[i],&n); 改为 r=sscanf(p,"letter%hd+%n",&b[i],&n); 即可。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:#include <stdio.h> #include <string.h> FILE *fi,*fo; char ln[80],*p; int n,r,i,h; unsigned short b[6]; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     h=0;     while (1) {         if (NULL==fgets(ln,80,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%2hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             }             }         }         fwrite(b,sizeof(unsigned short),i,fo);     }     fclose(fo);     fclose(fi);     return 0; } 赵老师，如果我的 ‘letter00’ 的值是要根据另外一个文件3中定义的值呢，也就是“letter00”的值，是根据文件3中确定，文件3的格式为  有letter00 letter01 letter02 ....有可能会有letter后面跟很大的数字。

user: user-1
content: letter02+letter01要这样存放： 02 00 01 00 这叫先存放低字节。 #include <stdio.h> #include <string.h> #define MAXDATA 6 #define MAXLEN 1024 FILE *fi,*fo,*fa; char ln[MAXLEN],*p; int n,r,i,h; unsigned short b[MAXDATA]; int addr; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     fa=fopen("addr.bin","wb");     addr=0;     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF || r==0) break;             }             }         }         n=i;         if (1) {//先低字节，将(1)改为(0)即可改用下面的“先高字节”             fwrite(&addr,1,3,fa);             fwrite(b,sizeof(unsigned short),n,fo);         } else {//先高字节             fputc(((char *)&addr)[2],fa);             fputc(((char *)&addr)[1],fa);             fputc(((char *)&addr)[0],fa);             for (i=0;i<n;i++) {                 fputc(((char *)&b[i])[1],fo);                 fputc(((char *)&b[i])[0],fo);             }         }         addr+=sizeof(unsigned short)*i;     }     fclose(fa);     fclose(fo);     fclose(fi);     return 0; }

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:[quote=引用 10 楼 tanqiyingk 的回复:] [quote=引用 9 楼 zhao4zhong1 的回复:] 如果你2.txt的每行长度都一样的话，没必要另弄文件保存每项的起始地址，只需计算 第n（n=0..counts-1）项的起始地址=n*12即n*0x0000000C长度是不一样的，要把地址存放在另一个bin文件中。[/quote] 长度不一样，且每行长度都不超过MAXLEN个字符，数据不超过MAXDATA项，全部数据字节数不超过0x00FFFFFF个的话：#include <stdio.h> #include <string.h> #define MAXDATA 6 #define MAXLEN 1024 FILE *fi,*fo,*fa; char ln[MAXLEN],*p; int n,r,i,h; unsigned short b[MAXDATA]; int addr; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     fa=fopen("addr.bin","wb");     addr=0;     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF || r==0) break;             }             }         }         fputc(((char *)&addr)[2],fa);         fputc(((char *)&addr)[1],fa);         fputc(((char *)&addr)[0],fa);         fwrite(b,sizeof(unsigned short),i,fo);         addr+=sizeof(unsigned short)*i;     }     fclose(fa);     fclose(fo);     fclose(fi);     return 0; } [/quote]数据要先存放高位呢，然后再存放低位 ，例如 letter02+letter01要这样存放： 02 00 01 00 还有addr 里面的数据也要先存放高位。 现在正在看代码，要慢慢看才行，很多函数我都没接触过。谢谢赵老师！！给你一个赞！！

user: user-1
content: 引用 10 楼 tanqiyingk 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 如果你2.txt的每行长度都一样的话，没必要另弄文件保存每项的起始地址，只需计算 第n（n=0..counts-1）项的起始地址=n*12即n*0x0000000C长度是不一样的，要把地址存放在另一个bin文件中。[/quote] 长度不一样，且每行长度都不超过MAXLEN个字符，数据不超过MAXDATA项，全部数据字节数不超过0x00FFFFFF个的话：#include <stdio.h> #include <string.h> #define MAXDATA 6 #define MAXLEN 1024 FILE *fi,*fo,*fa; char ln[MAXLEN],*p; int n,r,i,h; unsigned short b[MAXDATA]; int addr; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     fa=fopen("addr.bin","wb");     addr=0;     h=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=MAXDATA) break;             } else if (r==EOF || r==0) break;             }             }         }         fputc(((char *)&addr)[2],fa);         fputc(((char *)&addr)[1],fa);         fputc(((char *)&addr)[0],fa);         fwrite(b,sizeof(unsigned short),i,fo);         addr+=sizeof(unsigned short)*i;     }     fclose(fa);     fclose(fo);     fclose(fi);     return 0; }

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:如果你2.txt的每行长度都一样的话，没必要另弄文件保存每项的起始地址，只需计算 第n（n=0..counts-1）项的起始地址=n*12即n*0x0000000C长度是不一样的，要把地址存放在另一个bin文件中。

user: user-2
content: 先将文件1中的数据建立一个类似索引（存放到数组中）， 然后解析文件2，每次getline，然后将getline得到的一行进行详细解析， 如果操作数以字母开头的，到文件1保存的数组中，直接取相应索引的值， 如果是常数，直接写...

user: user-1
content: #include <stdio.h> #include <string.h> FILE *fi,*fo; char ln[80],*p; int n,r,i,h; unsigned short b[6]; int main() {     fi=fopen("2.txt","r");     fo=fopen("3.bin","wb");     h=0;     while (1) {         if (NULL==fgets(ln,80,fi)) break;         h++;         i=0;         p=strstr(ln,"= ");         if (NULL==p) {             printf("Format Error at Line %d:%s",h,ln);             continue;         }         p+=2;         while (1) {             r=sscanf(p,"letter%2hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hd+%n",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             else {             r=sscanf(p,"%hXH",&b[i],&n);             if (1==r) {                 p+=n;                 i++;                 if (i>=6) break;             } else if (r==EOF) break;             }             }         }         fwrite(b,sizeof(unsigned short),i,fo);     }     fclose(fo);     fclose(fi);     return 0; }

user: user-3
content: 词法分析，语法分析，采用编译器设计思路，参考yacc