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 文件中放了八个 0,当我运行这段代码时,它总是给我:

读取的字节是... 30 30 30 30 30

有人能告诉我为什么吗?

4

3 回答 3

2

因为'0' == 0x30

字符 '0' 是 0x30 (ascii)。

于 2014-02-10T22:46:58.037 回答
0

printf你使用%x和这个打印在hex. char '0'等于48 in decimalso 0x30 in hex。_

要打印0 in char,您需要printf使用%c

于 2014-02-14T07:56:14.640 回答
0

'0'您在文本文件中输入的内容被解释为char而不是int. 现在,当您尝试char在其hex (%x)值中打印它时,代码只会在其中找到它的等价物charhex打印它。

所以,你的'0' = 0x30. 您也可以尝试在文本文件中输入“A”并将其打印为十六进制,您将得到“41”,因为'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 回答