【问题标题】:Opening binary files in C在 C 中打开二进制文件
【发布时间】:2015-07-19 20:11:30
【问题描述】:

我正在尝试打开一个二进制文件并读取课程作业的内容。即使在进行研究之后,我在尝试打开和打印二进制文件的内容时也无法显示任何内容。我什至不确定我应该得到什么,如何检查它是否正确,但我知道没有什么(这是我目前得到的)是坏的。这是我在这个网站上搜索得到的代码

#include<stdio.h>

int main()
{
    FILE *ptr_myfile;
    char buf[8];

    ptr_myfile = fopen("packets.1","rb");
    if (!ptr_myfile)
    {
        printf("Unable to open file!");
        return 1;
    }

    fread(buf, 1, 8, ptr_myfile);

    printf("First Character: %c", buf[0]);

    fclose(ptr_myfile);
    return 0;
}

打印时,我得到“第一个字符:”,没有打印任何其他内容。也许它不能在终端中正常打印?我不确定,任何帮助将不胜感激,谢谢

【问题讨论】:

  • 看来你的调用是正确的。用文本文件试试。
  • 如果您使用十六进制编辑器查看您尝试阅读的文件,它将显示第一个字符。或者您可以打印字符的值而不是尝试将其转换为字符,只是为了检查它——它可能是一个空白字符。请注意,如果您使用使用 Unicode 编码的文本文件,文件开头可能会有一个字节顺序标记。

标签: c io binary


【解决方案1】:

首先,您需要检查缓冲区中有多少数据。 fread 返回长度;如果为零,则访问buf[0]是不合法的。

并非所有字符都是可打印的 如果您打印c 的字符代码,而不是c 本身,您可以看到得到的数据。为此使用%d

size_t len = fread(buf, 1, 8, ptr_myfile);
if (len != 0) {
    printf("First Character: '%c', code %d", buf[0], buf[0]);
} else {
    printf("The file has no data\n");
}

【讨论】:

    【解决方案2】:

    如果它是一个二进制文件,它的内容很可能不会像文本那样打印得特别好(这就是使二进制文件成为二进制文件的原因)。不要打印为字符,而是尝试打印为十六进制数字:

    #include <stdio.h>
    #include <stddef.h>
    #include <stdlib.h>
    
    int main()
    {
        FILE *ptr_myfile;
        char buf[8];
    
        ptr_myfile = fopen("packets.1","rb");
        if (!ptr_myfile)
        {
            printf("Unable to open file!");
            return 1;
        }
    
        size_t rb;
        do {
            rb = fread(buf, 1, 8, ptr_myfile);
            if( rb ) {
                size_t i;
                for(i = 0; i < rb; ++i) {
                        printf("%02x", (unsigned int)buf[i]);
                }
                printf("\n");
            }
         } while( rb );
    
        fclose(ptr_myfile);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多