【问题标题】:Insert Byte inside QByteArray from QString - Qt C++从 QString 中插入字节到 QByteArray - Qt C++
【发布时间】:2017-12-18 11:03:11
【问题描述】:

我有小问题,我需要向 trought modbus 发送一些字节。 其中一个是:0x04和0xFB

QString first, second;
first = "0x04";
second = "0xFB"

QByteArray array;
array[0] = first;
array[1] = second;
ecc...ecc..

何来解决? 我试过这个:

array[0] = first.toUInt(nullptr,16);

但这最后将十六进制转换为其他值。 怎么解决 ?

【问题讨论】:

  • 请看QByteArray。我相信,其中一个示例正是您尝试做的事情。
  • 您想以字节形式发送0x04,还是以文本形式发送"0x04"
  • 我想发送 0x04 字节,这个字节是从字符串生成的,我需要转换它。我使用了appena,但是QByteArray 的最终格式是错误的......我需要将字节插入到qbytearray 槽索引中。 (array[0] = first;
  • 好的,知道了。 QString::toUInt() 可以转换您的十六进制数,但是:您必须删除前面的 0x(并使用基数 16)或使用基数 0。您可能必须将 QString::toUInt() 的结果转换为 char 以消除响应.编译器警告。

标签: c++ qt hex qbytearray


【解决方案1】:

你可以使用:

QByteArray array=first.toLatin1() + second.toLatin1();
array.replace("0x","");
array= QByteArray::fromHex(array);

【讨论】:

    【解决方案2】:

    您可以将字节直接转换为十六进制代码并将其附加到最终的字节数组中,如下所示:

    QByteArray array;
    array.append(QByteArray::fromHex("04"));
    array.append(QByteArray::fromHex("FB"));
    

    或者简单地说:

    QByteArray array = QByteArray::fromHex("04FB");
    

    【讨论】:

    • 用你的解决方案,array.append(QByteArray::fromHex(first));不要使用 QString 变量。
    • 要将此解决方案与 QString 变量一起使用,您需要首先使用以下方法之一将其转换为 QByteArray:QString::toLatin1(), QString::toAscii(), QString::toLocal8Bit()。像这样:array.append(QByteArray::fromHex(first.toLocal8Bit()+second.toLocal8Bit()));
    猜你喜欢
    • 2016-10-14
    • 2016-11-27
    • 2013-12-25
    • 2013-10-16
    • 2012-12-17
    • 1970-01-01
    • 2018-12-22
    • 2018-05-06
    • 2013-10-08
    相关资源
    最近更新 更多