0
int main(void){
    char buffer[5] = {0};  
    int i;
    FILE *fp = fopen("haha.txt", "r");
    if (fp == NULL) {
    perror("Failed to open file \"mhaha\"");
    return EXIT_FAILURE;
    }
    for (i = 0; i < 5; i++) {
        int rc = getc(fp);
        if (rc == EOF) {
            fputs("An error occurred while reading the file.\n", stderr);
            return EXIT_FAILURE;
        }
    buffer[i] = rc;
    }
    fclose(fp);
    printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);
    return EXIT_SUCCESS;
}

haha.txt ファイルに 8 つの 0 を入れました。このコードを実行すると、常に次のようになります。

読み取られたバイトは... 30 30 30 30 30

誰かが理由を教えてもらえますか?

4

3 に答える 3

2

'0' == 0x30 であるため

文字「0」は 0x30 (ASCII) です。

于 2014-02-10T22:46:58.037 に答える
0

'0'テキスト ファイルに入力しcharint. charこれをその値に出力しようとするとhex (%x)、コードはそれと同等のものを見つけてchar出力hexします。

だから、あなたの'0' = 0x30. テキスト ファイルに 'A' を指定して 16 進数で出力することもできます'A' = 0x41。参考までに、AsciiTable .

テキスト ファイルに入力した内容を正確に印刷したい場合は、printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);

printf("The bytes read were... %c %c %c %c %c\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]); 
/* %c will tell the compiler to print the chars as char and not as hex values. */

Format SpecifiersMSDN Linkを読みたいと思うかもしれません。

于 2014-02-14T07:49:17.053 に答える