【发布时间】:2015-01-27 10:43:50
【问题描述】:
我定义了一个 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
任何帮助都会很棒 =)
【问题讨论】:
-
好吧,
QByteArray有[]运算符,所以你可以将它用作常规数组,只需将数据移动到“左侧”2 个字节,然后调整数组大小以在最后修剪它。或者只是将其复制到另一个字节数组中,同时跳过前 2 个字节。
标签: qt qstring qtcpsocket qbytearray qiodevice