读取二进制数据C(打开,读取)

时间:2014-12-17 22:43:19

标签: c file

我试图在C中读取包含read()open()的png文件,但我得到的只是损坏的数据。这是我的代码:

int  r;
int  fd;
char buff[4097];

fd = open("image.png", O_RDONLY);
while ((r = read(fd, buff, 4096)) > 0)
{
    buff[r] = '\0';
    printf("%s", buff);
}
close(fd);

8-10个第一个字节是相同的,然后数据被破坏并且在所有原始图像上都不匹配。 谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

不应期望能够读取二进制文件并将其作为字符串打印。为了查看文件中的实际内容,请将其打印为更适合二进制格式的内容 - 例如,十六进制:

int i = 0;
while ((r = read(fd, buff, 4096)) > 0) {
    for (int j = 0 ; j != r ; j++ ) {
        printf("%02x ", buff[j]);
        if (i % 16 == 0) {
            printf("\n");
        }
        i++;
    }
}
printf("\n");

请注意,此代码只是从您的图像文件中获取原始字节,而不会尝试解释它。您的文件也可能被压缩,因此尝试解释它可能是一项复杂的任务。