Qt里有个专门的类QDataStream就是专门读写二进制数据的, 它与QByteArray搭配在网络编程中有奇效.

来个栗子:

// write data
QByteArray data;
QDataStream wds(&data, QIODevice::WriteOnly);

char a(1); int b(2); float c(3); double d(4);
wds << a << b << c << d;

// read data
QDataStream rds(data);
char aa; int bb; float cc; double dd;
rds >> aa >> bb >> cc >> dd;

在读写字符串的时候, 要注意: QDataStream在写字符串时, 是会自动加上字符串长度的.
再来个栗子:

QByteArray data;
QDataStream wds(&data, QIODevice::WriteOnly);
ds << "hello";

你猜data有多长? 10!
为啥呢. 因为hello再加上\0一共是6个字节, ds会自动先写入字符串长度, 是一个int, 也就是4个字节, 所以加起来是10!

那怎么要怎样只输出hello, 而不让Qt自动添加长度呢? 可以这样:

QString msg = "hello";
for (int i=0; i<msg.length(); i++)
    ds << (unsigned char)msg.at(i).toAscii();

这样的话, 就能保证data长度是5了.

总结一下:
如果想让QDataStream不"自作聪明", 就要按照它头文件里给它输入数据.

相关文章:

  • 2022-12-23
  • 2022-02-26
  • 2021-05-09
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2022-01-10
  • 2022-12-23
猜你喜欢
  • 2021-05-25
  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
  • 2021-10-24
  • 2021-12-29
  • 2021-12-29
相关资源
相似解决方案