我定义了一个QIODevice (特别是QTcpSocket),并希望以原始格式编写一个字符串。我用下面的例子来描述我的愿望:
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但这不是我想要的。有没有可能将长度从4字节减少到仅2字节?或者,是否可以只获取字符串并定义我自己的长度为2字节?
我问这个问题的原因是我想向服务器发送一条消息。但是服务器只接受以下格式的数据包:
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任何帮助都是很好的=)
发布于 2014-11-29 16:54:03
如果您需要一种与QDataStream的序列化不匹配的特殊序列化格式,那么您应该自己编写代码,而不是依赖QDataStream并修改结果。它可能是这样的:
QByteArray byteArray;
...
QDataStream stream(..);
...
byteArray.chop(1); // to remove the 0 character at the end of c string
stream << quint16(byteArray.size()); // to write the size on 2 bytes
for(int i = 0; i < byteArray.size(); i++)
stream << byteArray[i];https://stackoverflow.com/questions/27194318
复制相似问题