在 C 中打开二进制文件

Opening binary files in C

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

#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;
}

打印时,我得到 "First Character: ",没有打印任何其他内容。也许它不能在终端正常打印?我不确定,如果有任何帮助,我们将不胜感激,谢谢

首先,您需要检查缓冲区中有多少数据。 fread returns 长度;如果为零,则访问 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");
}

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

#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;
}