2014-04-24 2 views
3

다른 데이터로 QByteArray을 채워야합니다. 그래서 저는 QDataStream을 사용하고 있습니다.QDataStream에 QByteArray를 추가 하시겠습니까?

QByteArray buffer; 
QDataStream stream(&buffer, QIODevice::WriteOnly); 

qint8 dataHex= 0x04; 
qint8 dataChar = 'V'; 

stream << dataHex<< dataChar; 
qDebug() << buffer.toHex(); // "0456" This is what I want 

그러나 QByteArray를 buffer에 추가하고 싶습니다.

QByteArray buffer; 
QDataStream stream(&buffer, QIODevice::WriteOnly); 

qint8 dataHex= 0x04; 
qint8 dataChar = 'V'; 
QByteArray moreData = QByteArray::fromHex("ff"); 

stream << dataHex<< dataChar << moreData.data(); // char * QByteArray::data() 
qDebug() << buffer.toHex(); // "045600000002ff00" I would like "0456ff" 

무엇이 누락 되었습니까?

답변

9

char*가 추가 될 때 그것은 \0 종단지지하며

writeBytes' doc:

는 상기 길이 지시자는 len 기입 버퍼들 (UINT32 같이) 제 사이즈를 써 writeBytes으로 직렬화 스트림 및 스트림에 대한 참조를 반환합니다.

len은 quint32로 serialize되고 s에서 len 바이트가 이어집니다. 데이터가 인코딩되지 않음을 유의하십시오.

당신은 그것을 회피 writeRawData를 사용할 수 있습니다

stream << dataHex<< dataChar; 
stream.writeRawData(moreData.data(), moreDate.size()); 
3

00000002는 스트림에 기록되는 char 배열의 크기입니다.

2

당신이없는 무엇, QDataStream하지 원시 데이터입니다. 자체 직렬화 형식이 있습니다. QDataStream으로 데이터를 쓰고 (직렬화) 읽고 다시 (역 직렬화)하고 신뢰할 수있는 QIODevice (예 : QBuffer 또는 QFile)을 사용하는 경우에 가장 적합합니다.

QBuffer에 원시 데이터를 추가하려면 write method의 적절한 과부하를 사용할 수 있습니다. 그렇다면 QByteArray에 직접 추가하는 것이 좋습니다.

관련 문제