64,637
社区成员
发帖
与我相关
我的任务
分享
//将文件1中所有'\uAABB'替换为'\xBB'+'\xAA','C'替换为'C\x00',且文件头加'\xFF\xFE',结果保存到文件2中。
#include <stdio.h>
FILE *f1,*f2;
int c,s,n,i;
char fuAABB[7];
int AA,BB;
void main(int argc,char **argv) {
if (argc<3) {
printf("%s 文件1 文件2\n将文件1中所有\"\\uAABB\"替换为\"\\xBB\\xAA\",\'C\'替换为\"C\\x00\",且文件头加\"\\xFF\\xFE\",结果保存到文件2中。\n",argv[0]);
return;
}
f1=fopen(argv[1],"rb");
if (NULL==f1) {
printf("找不到文件[%s]!\n",argv[1]);
return;
}
f2=fopen(argv[2],"wb");
if (NULL==f2) {
fclose(f1);
printf("创建文件[%s]出错!\n",argv[2]);
return;
}
fuAABB[6]=0;
fputc(0xFF,f2);fputc(0xFE,f2);
s=0;
while (1) {
c=fgetc(f1);
if (EOF==c) {
for (i=0;i<s;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
break;//
}
switch (s) {
case 0:
if ('\\'==c) {
n=0;
fuAABB[n++]=c;
s=1;
} else {
fputc(c,f2);fputc(0,f2);
}
break;
case 1:
if ('u'==c) {
fuAABB[n++]=c;
s=2;
} else {
for (i=0;i<n;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
fputc(c,f2);fputc(0,f2);
s=0;
}
break;
case 2:
if (('0'<=c&&c<='9')||('A'<=c&&c<='F')||('a'<=c&&c<='f')) {
fuAABB[n++]=c;
s=3;
} else {
for (i=0;i<n;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
fputc(c,f2);fputc(0,f2);
s=0;
}
break;
case 3:
if (('0'<=c&&c<='9')||('A'<=c&&c<='F')||('a'<=c&&c<='f')) {
fuAABB[n++]=c;
s=4;
} else {
for (i=0;i<n;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
fputc(c,f2);fputc(0,f2);
s=0;
}
break;
case 4:
if (('0'<=c&&c<='9')||('A'<=c&&c<='F')||('a'<=c&&c<='f')) {
fuAABB[n++]=c;
s=5;
} else {
for (i=0;i<n;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
fputc(c,f2);fputc(0,f2);
s=0;
}
break;
case 5:
if (('0'<=c&&c<='9')||('A'<=c&&c<='F')||('a'<=c&&c<='f')) {
fuAABB[n++]=c;
sscanf(fuAABB+2,"%02x%02x",&AA,&BB);
fputc(BB,f2);fputc(AA,f2);
s=0;
} else {
for (i=0;i<n;i++) {fputc(fuAABB[i],f2);fputc(0,f2);}
fputc(c,f2);fputc(0,f2);
s=0;
}
break;
}
}
fclose(f2);
fclose(f1);
printf("%s %s %s OK.\n",argv[0],argv[1],argv[2]);
}