我试图在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个第一个字节是相同的,然后数据被破坏并且在所有原始图像上都不匹配。 谢谢你的帮助
答案 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");
请注意,此代码只是从您的图像文件中获取原始字节,而不会尝试解释它。您的文件也可能被压缩,因此尝试解释它可能是一项复杂的任务。