C语言,如何使写入一个文件之后用记事本打开显示为乱码,程序本身读取则是正解?

2024-11-17 08:43:03
推荐回答(3个)
回答1:

if((fwrite(p,sizeof(struct part),1,fp))!=1)
其实你说的就是数据加密,看看下面这个代码#include
#include
void main()
{
FILE *fp;
if((fp = fopen("/mnt/sdcard/kk.txt","r"))==NULL)
{printf("wen jian bu cuan zai!");
exit (0);}
printf("dakai chenggong!\n");
int i;
int n;
char str[1000];
for( i=0; i<1000&&!feof(fp); i++ )
{str[i] = fgetc(fp);
printf("%c",str[i]);}
str[i]='\0';
n = i;
fclose(fp);
for(i = 0; i < n; i++)
str[i] = str[i] - 32;这里就是算法加密,可以升级加密算法
str[i-1] = '\0';
FILE *qq,*gg;
/*qq=tmpfile();*/
char name[8];
tmpnam(name);
gets(name);
gg=fopen(name,"w");
for( i = 0; i < n; i++)
{fputc(str[i],gg);
printf("%c",str[i]);}
fclose(gg);
rename(name,"/mnt/sdcard/jia mi");
}
当然这个是原始的加密方式,你要读取的时候读取后+32即可。当然你可以升级算法,数学书上有讲过加密问题,貌似有种加密方式是无法破解的,总之都是算法加密

另外你可以用二进制方式写入数据,那样就会变成乱码,而你用sizeof计算结构体大小读取数据,就能起到加密的作用,应为别人不知道sizeof的大小

回答2:

我说一个思路吧,将结构体变量的起始地址 强制转换为(unsigned char *)类型,然后根据结构体大(小sizeof得到),逐个字节进行翻转(即循环左移4bit),然后用fwrite写入文件,你再看一下。
想正确读出文件内容,需要进行相反的处理。

回答3:

在你写入到这个文件里面之前。。可以将数据统一的加一个数字存到文件里面,在读取的时候再减这个数就回去了哈。。。