【发布时间】:2014-03-30 06:03:42
【问题描述】:
我有一个问题:
我正在编写一个功能类似于十六进制编辑器的 c 程序。我想获取一个文件并查看它的十六进制值。例如,假设我有一个文本文件“helloworld.txt”,其中仅包含“Hello World!”字样。在其中,我想指定程序获取该文件,读取其十六进制值(同样,该文件是一个简单的 .txt 文件,而不是二进制文件)并将其存储在一个数组中以备后用。
这是我目前所拥有的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch, file_name[25];
FILE *fp;
printf("Enter the name of file you wish to see\n");
gets(file_name);
fp = fopen(file_name,"rb"); // read binary mode
if( fp == NULL ) //error checking
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
printf("The contents of %s file are :\n", file_name);
while( ( ch = fgetc(fp) ) != EOF )
printf("%c",ch);
fclose(fp);
return 0;
}
如您所见,这实际上只是一个简单的文件,读取和打印内容。但是,问题是即使我处于“读取二进制”模式,它也不会给我文本文件的十六进制值。
我如何构造这个程序,以便它读取标准文本文件的十六进制值,然后 (a) 将它们放入一个数组中(我认为使用 for 循环应该足够简单)或 (b) 打印它们出现在屏幕上?
我尝试用谷歌搜索看看其他人是否也在尝试做同样的事情,但人们要么已经从二进制文件中读取,要么文件中已经有了十六进制值。我在常规 .txt 文件中有纯文本,但我想要下面的十六进制值(换句话说,文件的一种 hexdump)。我希望我的问题和我正在尝试做的事情是有意义的。如果您有任何问题,请随时告诉我!提前感谢您的所有帮助!我真的很感激!
【问题讨论】:
-
永远不要使用gets()。
-
而且...这只是一个表示问题,你
printf("%c", ch);,所以你得到了char格式;喜欢printf("%02X", ch);,你会得到十六进制值。