0

此代码每个字节读取一个文件字节以复制它:

 fplain = fopen("plaintext", "rb");
 fcypher = fopen("cyphertext", "wb");

 for(j = 0; j < Nb; j++){
    for(i = 0; i < 4; i++){
            if(feof(fplain))
                break;              
            fread(&in[i][j], sizeof(unsigned char), sizeof(unsigned char), fplain); 
            fwrite(&in[i][j], sizeof(unsigned char), sizeof(unsigned char), fcypher);
    }
 }

问题是输入文件包含未正确读取的特殊字符:

2Cö¨Z011¢à74

好像之前检测到文件结尾,输出文件中的结果是:

2Cö¨Z011

我在 fopen() 函数中使用“rb”模式。

4

1 回答 1

0

以十六进制编码的字节占用两个字节。要生成 16 个字符,您必须从文件中读取 32 个字节;如果您读取 16 个字节,则只能产生 8 个字符。

另一方面,如果“16 个十六进制编码字符”是指文件仅包含 16 个字节,则不能期望读取 12 个字符(24 个字节)。在这种情况下,您预期输出中的最后 4 个字符可能是由错误程序产生的随机垃圾,并且无法可靠地重现它们。

于 2013-04-03T06:59:49.150 回答