2010-05-21 3 views
0

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"이 언제인지를 감지하는 함수를 만듭니다. 어떻게 이진 데이터를 캡처 한 후에? 아니면, 모든 데이터를 메모리에 저장하고 구문 분석 한 후에? 하지만 어떻게? 필자는 필사적이다 : (

답변

1

recv 그러나 sizeof (버퍼)라고 말한 최대 값까지 recv는 많은 바이트를 반환 할 것이다 .4라면, 그게 아마도 대부분의

"헤더의 끝"은 당신이 그것을 해석하는데 필요한 컨텍스트를 제공하지 않았기 때문에 의미가 없습니다. 나는 그것이 패킷 헤더와 관련이 있다고 생각하지만 각 프로토콜은 다릅니다. 알 방법이 없습니다

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 >을 추가하십시오.

+0

외부 라이브러리를 사용하고 싶지 않습니다.이 방법은 헤더를 바이너리 데이터로 나누지 않고 모든 데이터를 바이너리로 변환하는 것입니까? 그렇습니다. – fixo2020

+0

글쎄, 당신이받을 때마다 버퍼에있는 모든 것들. 헤더의 끝에 도달했는지 확인하고 루프를 종료했는지 확인할 수 있지만 외부 라이브러리를 사용하지 않으려는 경우에는 도움이되지 않습니다. –

+0

아마도 버퍼에있는 각 문자를 int (즉, 'int temp = (int) buffer [i];')로 변환하여 수학적으로 또는 수동으로 수행 한 다음이를 표준 10 진수 - 2 진 변환을 사용하여 2 진수로 변환 할 수 있습니다 기술. 모든 문자는 ascii 또는 유니 코드 색인을 가지므로이 작업을 수행 할 수 있습니다. –

관련 문제