C 特殊字符读取错误-文件I/0

C 特殊字符读取错误-文件I/0,c,linux,gcc,file-io,special-characters,C,Linux,Gcc,File Io,Special Characters,此代码每字节读取一个文件字节,以便复制它: 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

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

 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

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

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


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

哪个值包含变量
Nb
?@Howard 4(int)。输入文件有16个十六进制ascii字符。因此,根据文件的编码(以及编译器的字符大小),您可能读取的字节不够。@Howard编译器是gcc,文件没有扩展名。
2Cö¨Z011¢74
是12个字符。此处:“输入文件有16个十六进制ascii字符。”我想您可以将其解释为有16个十六进制字符,这意味着文件包含8个字符的数据,但这与能够从文件中读取12个字符的预期相矛盾。
2Cö¨Z011