在C中打开二进制文件

时间:2015-05-08 19:51:15

标签: c io binary

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

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

当这个打印时,我得到“第一个字符:”没有其他打印。也许它在终端中无法正常打印?我不确定,非常感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:2)

首先,您需要检查缓冲区中的数据量。 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");
}

答案 1 :(得分: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;
}