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
有人可以告诉我为什么吗?
答案 0 :(得分:2)
因为'0'== 0x30
字符'0'是0x30(ascii)。
答案 1 :(得分:0)
'0'
被解释为char
而不是int
。现在,当您尝试在其char
值中打印hex (%x)
时,代码只会找到char
中hex
的等效内容并打印出来。
那么,你的'0' = 0x30
。您也可以尝试在文本文件中输入'A'并将其打印为十六进制,因为'A' = 0x41
,您将获得'41'。
供您参考,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 Specifiers和MSDN Link。
答案 2 :(得分:0)
在printf
%x
中使用hex
,并在char '0'
中打印。 48 in decimal
等于0x30 in hex
所以0 in char
。
要打印printf
,您需要将%c
与{{1}}