如何从二进制数据中划分头

时间:2010-05-21 15:23:38

标签: c++

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”的函数?之后如何捕获二进制数据? 或者,我将所有数据都放在内存中,并在解析后?但怎么样? 我很绝望:(

2 个答案:

答案 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 >添加到文件