zoukankan      html  css  js  c++  java
  • Qt里怎么处理二进制数据

    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再加上一共是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不"自作聪明", 就要按照它头文件里给它输入数据.

  • 相关阅读:
    在Exchange 2013中重置用户密码
    在exchange邮箱服务器上启用反垃圾邮件功能
    EMC队列 发件人为空 From Address: <>
    zabbix删除历史记录
    ESXi 6.7 CVE-2018-3646警告的处理
    CentOS安装nmap端口查看工具
    webpack学习
    vscode 点滴
    chrome点滴
    前端资料汇总
  • 原文地址:https://www.cnblogs.com/chaoswong/p/5569036.html
Copyright © 2011-2022 走看看