0
QIODevice (특히 QTcpSocket)를 정의했으며 원시 형식으로 문자열을 쓰려고합니다. 나는 다음과 같은 예를 들어 내 소원을 설명합니다원시 QByteArray를 쓰거나 QByteArray를 조작하는 방법
char* string= "Hello World";
QByteArray bArray;
QDataStream stream(&bArray, QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_4_6);
stream << string;
QFile file("Output.txt");
file.open(QIODevice::WriteOnly);
file.write(bArray);
file.close();
나는 다음과 같은 결과를 얻을 진수 편집기에서과 Output.txt를 열면 :
00 00 00 0C 48 65 6C 6C 6F 20 57 6F 72 6C 64 00
00 00 00 0C = 4bytes (length of the following massage)
48 65 6C 6C 6F 20 57 6F 72 6C 64 = 11bytes (the string "Hello World")
00 = an one empty byte
을하지만 내가 원하는 것을하지 이잖아. lenth를 4bytes에서 2bytes로 줄일 수 있습니까? 아니면 그냥 문자열을 잡고 대신 2bytes의 길이를 정의 할 수 있습니까?
내가 묻는 이유는 서버에 메시지를 보내려한다는 것입니다. 그러나 서버는 다음과 같은 형식으로 패킷을 받아 들인다 : 당신이 QDataStream의 직렬화 일치하지 않는 특별한 직렬화 포맷을해야하는 경우
00 0C 48 65 6C 6C 6F 20 57 6F 72 6C 64
00 0C = 2bytes
48 65 6C 6C 6F 20 57 6F 72 6C 64 = 11bytes
어떤 도움이 좋을 것 =)
음,'QByteArray'가있다'[]'연산자, 그래서 당신은 단지 "왼쪽"데이터 2 바이트를 이동, 규칙적인 배열로 사용하는 배열의 크기를 조정할 수 있습니다 끝 부분을 다듬 으십시오. 또는 첫 번째 2 바이트를 건너 뛰면서 다른 바이트 배열로 복사하십시오. – dtech