【问题标题】:Error reading hex data from .log file从 .log 文件读取十六进制数据时出错
【发布时间】:2016-06-30 12:41:56
【问题描述】:

我在从命令行指定的 .log 文件中读取十六进制数据时遇到问题。 它只打印大约 30 行,然后退出。 谁能帮我理解为什么会这样?我需要它来打印输入文件中的所有十六进制数据。

int byte;
FILE *Inputfile = stdin;
char *filename = argv[1];
Inputfile = fopen(filename, "r");

while(( byte = fgetc(Inputfile)) != EOF)

     {
         printf(" %02x",byte);
     }

     fclose(Inputfile);

非常感谢,

编辑:输入文件是一个 .log 文件,在十六进制编辑器中如下所示: Input data

【问题讨论】:

  • 你能发布你输入的数据吗?你应该检查fopenreturn。
  • 请在访问argv[1]之前测试argc的值,在调用fgetc之前测试Inputfile的值。
  • 链接文件是你打开的真实文件吗?
  • 这不是“十六进制数据”,它看起来像一个二进制文件。你应该用"rb"打开它。
  • @Marcus 您的示例输入数据不是文本。

标签: c hex eof fgetc


【解决方案1】:

在 Windows 系统上,当从文件中读取数据 0x1a 时,读取文本文件将终止。这与在键盘上输入时的 Ctrl-Z 文件结尾的值相同。

以二进制方式打开后读取的样本文件数据:

41 42 43 44 1a 45 46 47

以文本模式打开后读取的示例文件数据:

41 42 43 44

请以二进制模式打开文件。

Inputfile = fopen(filename, "rb");

在其他系统上,它可能是不同的 EOF 标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2016-11-04
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多