【问题标题】:Can't open image C无法打开图片 C
【发布时间】:2014-11-24 11:20:30
【问题描述】:

我正在尝试打开图像并将其字节复制到数组中。但是,如果我尝试打印据称图像字节仅存储一个“?”的数组。被打印。它不应该在rb中打开吗?代码如下:

char* nomefich = "cloud.png";
FILE *fi = fopen(nomefich,"rb");
buf = malloc(size); //size represents the size of file (I used struct stat to obtain that)
fread(buf,size,1,fi);
fclose(fi);

【问题讨论】:

  • 你说打印数组但没有显示代码
  • 将二进制数据写入终端时,您的终端将无法解释所有符号,所以是的,这种行为是正常的。

标签: c image file fread


【解决方案1】:

如果要打印二进制文件的内容,则需要将值写入十六进制值

例如

for (i = 0; i < size; ++i)
{
  printf( "%2X ", buf[i] );
  if ( i != 0 && (i % 16) == 0 ) 
  {
    putchar('\n');
  }
}

【讨论】:

  • 什么是(i % 0)?.我认为是UB。
【解决方案2】:

应该以二进制模式打开文件以进行读取 - 因此 rb.只有可打印的字符才会打印,如果您尝试打印为字符串,则只能打印到二进制零 '\0' 字符。

如果你想确保文件被读取,你可以打印签名字符,你可以在这里找到http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html。我会将它们打印为整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2013-05-28
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多