首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取二进制数据C (open,read)

读取二进制数据C (open,read)
EN

Stack Overflow用户
提问于 2014-12-18 06:43:19
回答 1查看 1K关注 0票数 1

我试图用C语言读取一个带有read()open()的png文件,但我得到的都是损坏的数据。下面是我的代码:

代码语言:javascript
运行
复制
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个字节是相同的,然后数据被破坏,与原始图像完全不匹配。谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 06:48:34

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

代码语言:javascript
运行
复制
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");

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27536225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档