QString, QByteArray, QDataStream, QStringLiteral 用法验证

    // 要么使用"QStringLiteral",要么使用"#pragma execution_character_set("utf-8")",但不能同时使用。
    // 长度是6,宽字符。
    QString s(QStringLiteral("ABCD中文"));

    // b1长度:10,能恢复
    QByteArray b1 = s.toUtf8();
    QString s1 = b1;

    // b2长度:6,不能恢复
    QByteArray b2 = s.toLatin1();
    QString s2 = b2;

    // b3与b1相同,能恢复
    QByteArray b3 = s.toStdString().c_str();    
    QString s3 = b3;

    // b4长度:16,前4个字节是内容长度,即12,后面12字节是内容
    QByteArray b4;
    QDataStream out4(&b4, QIODevice::WriteOnly);
    out4 << s;
    QString s4_0 = b4;        // 格式不对,赋值后s4_0为空
    QString s4_1;
    QDataStream in4(&b4, QIODevice::ReadOnly);
    in4 >> s4_1;            // 能恢复

    // b5长度:14,前4个字节是内容长度,即10,后面10字节是内容
    QByteArray b5;
    QDataStream out5(&b5, QIODevice::WriteOnly);
    out5 << s.toUtf8();
    QString s5_0 = b5;        // 格式不对,赋值后s4_0为空
    QString s5_1;
    QDataStream in5(&b5, QIODevice::ReadOnly);
    in5 >> s5_1;            // 不能恢复,是乱码

 

posted on 2022-03-01 08:13  朱迎春  阅读(365)  评论(0编辑  收藏  举报