2015-01-29 4 views
2

나는 아직도 C++을 배우고 있고, 여전히 나에게 당황 스러울 수있는 것들로 시작하고 싶다.C++ stringstream 여분의 바이트 추가하기

내가 달성하려고하는 것은 소켓을 통해 보낼 바이트 스트림을 작성하는 것입니다. 내가 문자열로 s1Stream를 변환 할 때 악수

std::stringstream s1Stream; 
char randData[1528], zeroVal[4] = {0, 0, 0, 0}; 
memset(&randData, 1, sizeof(randData)); // Fill the buffer with data 

s1Stream << timestampVal; // 4 bytes 
s1Stream << zeroVal; // 4 bytes 
s1Stream << randData; // 1528 bytes 

에 대한 패킷을 길이가 1536 바이트를 생성하고 프로그램 크기가 1541 것을 말한다 문자열의 크기()를 확인하기 위해 노력하고있어.

내가 뭘 잘못하고 있니?

답변

9

std::stringstream 여기에서 사용되는 operator<<(char const*)은 0 인수 C 스타일 문자열로 해당 인수를 처리하며 randData 배열은 제로 종료되지 않습니다. randData 이후

정말 C 스타일의 문자열이 아닌 그것을 포함하는 널 (null) 바이트를 끝낼 수 있었던 것처럼, 수정은이 문제의 아무것도를 제외하고,뿐만 아니라 zeroVal에 적용

s1Stream.write(randData, sizeof(randData)); 

주를 사용하는 것입니다 보인다 zeroVals1Stream에 쓰여 지므로 첫 번째 바이트에서 제로 종료됩니다.

+0

감사합니다. 매력처럼 작동했습니다. 일단 StackOverflow를 사용하면 답변을 수락합니다. – Sk1ppeR

+0

진짜 질문은 그가'std :: stringstream'을 사용하여 시작하는 이유입니다. iostream 클래스의 추상화는 텍스트 형식입니다. 만약 당신이 그렇게하지 않는다면 아마 올바른 도구가 아닐 것입니다. –