我通过下面的代码序列化文件,然后通过winsocks发送它,这对于文本文件可以正常工作,但是当我尝试发送jpg时,字符串包含\ 0作为某些字符元素,因此套接字仅发送字符串的一部分,认为\ 0是结尾,我正在考虑用其他方式替换\ 0,但是说我用'xx'替换了它,然后又将其替换到另一端,如果文件自然出现了' xx'迷路了吗?当然,我可以制作一个大的,不太可能的序列,但这会使文件膨胀。
任何帮助表示赞赏。
char* read_file(string path, int& len)
{
std::ifstream infile(path);
infile.seekg(0, infile.end);
size_t length = infile.tellg();
infile.seekg(0, infile.beg);
len = length;
char* buffer = new char[len]();
infile.read(buffer, length);
return buffer;
}
string load_to_buffer(string file)
{
char* img;
int ln;
img = read_file(file, ln);
string s = "";
for (int i = 1; i <= ln; i++){
char c = *(img + i);
s += c;
}
return s;
}
答案 0 :(得分:5)
可能在代码中的某个位置(在您发布的代码中没有看到),您使用strlen()
或std::string::length()
发送数据,和/或使用std::string::c_str()
来发送数据获取缓冲区。由于这些函数在\ 0处停止,因此会导致数据被截断。
std :: string不适合处理二进制数据。请改用std::vector<char>
,然后删除新的[]内容。