ofstream dest(“test.txt”,ios :: binary);
while (true){
size_t retval = recv (sd, buffer, sizeof(buffer), 0);
dest.write(buffer,retval);
if(retval <= 0) { delete[] buffer; break;}
}
现在,recv()
函数每个循环返回4个字节吗?和缓冲区包含它,这返回所有数据所以,伪标题和二进制数据(图像),但我想知道如何只捕获二进制数据,我知道标题的结尾是“\ n \ r”对吗?但是这个解决方案的解决方案是什么?
我创建了一个检测何时“\ n \ r”的函数?之后如何捕获二进制数据?
或者,我将所有数据都放在内存中,并在解析后?但怎么样?
我很绝望:(
答案 0 :(得分:1)
recv将返回许多字节,它可以达到你告诉它的最大值,即sizeof(缓冲区)。如果那是4,那么大部分时间都可以阅读。
“标题的结尾”等没有任何意义,因为您没有提供解释它所需的上下文。我猜这与包头有关,但每个协议都不同,所以我们无从得知。
答案 1 :(得分:0)
要将单个字符转换为二进制文件,请尝试以下操作:
ofstream dest("test.txt",ios::binary);
while (true){
size_t retval = recv (sd, buffer, sizeof(buffer), 0);
//Convert individual chars to binary
// and output to file
for(int i=0; i < retval; ++i) {
dest << bitset<8>(buffer[i]);
}
if(retval <= 0) { delete[] buffer; break;}
}
确保将#include < bitset >
添加到文件