C++ 将二进制jpg数据复制到缓冲区
我做得对吗。我希望最终通过一个套接字发送这些信息,并在另一端对其进行解码。任何建议都会非常有用。从理论上讲,是否可以通过套接字将其发送并解码为另一侧的图像?嗯,您没有进行足够的错误检查。fopen、fseek、ftell、malloc、fread和fclose都可能失败。故障可能会导致崩溃或其他意外结果 fread可能返回的字符数少于您试图读取的字符数,因此您可能也应该对此进行检查 您已经分配了+1字节,大概是为了添加一个终止的“\0”?但是你没有初始化最后一个字节。jpeg文件可能合理地包含嵌入的“\0”,因此添加终止的“\0”可能不会得到您希望的结果 最后,标准将sizeof(char)定义为1,始终为。所以,你最好乘以1,或者更好,不要C++ 将二进制jpg数据复制到缓冲区,c++,C++,我做得对吗。我希望最终通过一个套接字发送这些信息,并在另一端对其进行解码。任何建议都会非常有用。从理论上讲,是否可以通过套接字将其发送并解码为另一侧的图像?嗯,您没有进行足够的错误检查。fopen、fseek、ftell、malloc、fread和fclose都可能失败。故障可能会导致崩溃或其他意外结果 fread可能返回的字符数少于您试图读取的字符数,因此您可能也应该对此进行检查 您已经分配了+1字节,大概是为了添加一个终止的“\0”?但是你没有初始化最后一个字节。jpeg文件可能合理地包含嵌
除此之外,它看起来基本上是正确的。解释您所看到的问题将有助于获得更好的答案更改您的标题,这令人困惑您不需要+1表示二进制数据,但否则它应该将文件读入缓冲区。很难说你在这里寻找什么答案。我不认为人们用C++来使用<代码> MalCube()。我认为他们也使用了
unique\u ptr
。和<>代码>()(代码)>将告诉你在一个函数调用中文件的长度。这段C代码是你不应该尝试使用C++的完美例子。在C++中,您将使用<代码> STD::String < /C>,<代码> STD::IFStry和<代码> STD::vector < /代码>。
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);
}