首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写原始QByteArray或操作QByteArray

如何编写原始QByteArray或操作QByteArray
EN

Stack Overflow用户
提问于 2014-11-29 02:36:35
回答 1查看 1.7K关注 0票数 0

我定义了一个QIODevice (特别是QTcpSocket),并希望以原始格式编写一个字符串。我用下面的例子来描述我的愿望:

代码语言:javascript
复制
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,我会得到以下结果:

代码语言:javascript
复制
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字节?

我问这个问题的原因是我想向服务器发送一条消息。但是服务器只接受以下格式的数据包:

代码语言:javascript
复制
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

任何帮助都是很好的=)

EN

回答 1

Stack Overflow用户

发布于 2014-11-29 16:54:03

如果您需要一种与QDataStream的序列化不匹配的特殊序列化格式,那么您应该自己编写代码,而不是依赖QDataStream并修改结果。它可能是这样的:

代码语言:javascript
复制
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];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27194318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档