此代码读取每个字节的文件字节以便复制它:
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”模式。
答案 0 :(得分:0)
以十六进制编码的字节占用两个字节。要生成16个字符,您必须从文件中读取32个字节;如果您读取16个字节,则只能生成8个字符。
另一方面,如果通过“16个十六进制编码的字符”表示该文件只包含16个字节,则不能指望读取12个字符(24个字节)。在这种情况下,预期输出中的最后4个字符可能是由错误程序产生的随机垃圾,并且无法可靠地重现它们。