将二进制jpg数据复制到缓冲区中

时间:2016-12-03 14:46:03

标签: c++

void jpgToBuff(const char* srcfilename)
{

    FILE* file = fopen(srcfilename, "rb");
    fseek(file, 0, SEEK_END);
    unsigned long fileLen = ftell(file);
    fseek(file, 0, SEEK_SET);
    char* file_data;
    file_data = (char *)malloc((fileLen + 1) * sizeof(char));
    fread(file_data, fileLen, 1, file);
    fclose(file);
}

我是否正确地这样做了我想最终通过套接字发送此信息并在另一侧解码。任何建议都会非常有用。这理论上是否可以通过套接字发送它并将其解码为另一侧的图像?

1 个答案:

答案 0 :(得分:0)

嗯,你没有做足够的错误检查。 fopen,fseek,ftell,malloc,fread和fclose都会失败。失败可能会导致崩溃或其他意外结果。

fread可能会返回比您尝试阅读的字符少的字符,因此您也应该检查它。

你已经分配了+1个字节,可能是因为你可以添加一个终止'\ 0'?但是你没有初始化最后一个字节。一个jpeg文件可以合理地包含一个嵌入的'\ 0',所以添加一个终止'\ 0'可能不会得到你希望的结果。

最后,sizeof(char)由标准定义为1。所以,您可能会乘以1,或者更好,但不要。

除此之外,它看起来基本正确。

相关问题