C语言关于加密解密过程?

加密过程

#include<stdio.h>
#pragma warning(disable:4996)

int main(void)
{
    FILE * fp1 = fopen("D:\\a.txt", "r");
    FILE * fp2 = fopen("D:\\b.txt", "w");
    if (!fp1)
    {
        printf("文件打开失败");
        return -1;
    }

    char ch;
    while ((ch = fgetc(fp1)) != EOF)
    {
        ch++;
        fputc(ch, fp2);
    }

    fclose(fp1);
    fclose(fp2);

    return 0;
}
我的a.txt里面的文本是:玄幻小说

这是解密过程

#include<stdio.h>
#pragma warning(disable:4996)

int main(void)
{
    FILE * fp2 = fopen("D:\\b.txt", "r");
    FILE * fp3 = fopen("D:\\c.txt", "w");
    if (!fp2)
    {
        printf("文件打开失败");
        return -1;
    }

    char ch;
    while ((ch = fgetc(fp2)) != EOF)
    {
        ch--;
        fputc(ch, fp3);
    }

    fclose(fp2);
    fclose(fp3);

    return 0;
}

为什么在c.txt中输出的是:? ,输出其他东西都好使,就玄幻小说这四个字输出的是问号。

2个回答

你应该用二进制方式去读写文件,而不是char,否则涉及到中文编码问题,字符可能被截断。

while ((ch = fgetc(fp1)) != EOF)
{
ch++; //这里为什么要做加加操作,不是把读出的值改变了吗?
fputc(ch, fp2);
}

huanxiangzhishi123
用的微信名称 回复: 我这边文件用记事本保存为ascii码会出现你说的情况,这是因为玄对应的国标编码是D0FE,当加密程序读到FE时,加1后变成了FF,所以解密程序解密时读到FF就结束了,FF的值就是-1,实际上c.txt只有D0一个字符
8 个月之前 回复
huanxiangzhishi123
用的微信名称 回复husky66: 哦,我明白你的意思了,但是我本地用“玄幻小说”测试是没有问题的
8 个月之前 回复
husky66
husky66 就是要加密,不让别人知道你文本里有什么,所以才++改变原本的值
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐