【问题标题】:Appending QString to a QByteArray as a hexadecimal instead characters?将 QString 作为十六进制而不是字符附加到 QByteArray?
【发布时间】:2023-03-28 03:25:01
【问题描述】:

我遇到的一个奇怪的事情是,在我正在执行的循环中,我用 QStringList 的块填充 QByteArray。更准确地说,QStringList 采用标准的QString 并在每次遇到字符串中的“-”时将其拆分为更小的位。因此,如果QString 包含"A1-B2-C3-D4-E5",它会将列表填充为小块(list[0]="A1",list[1]="B2",list[2]="C3",...)。但是,我需要这些字节来填充QByteArray,当我使用循环时,它只需要它的字符并将QByteArray 填充为bytearray[0]="A",bytearray[1]="1",bytearray[2]="2" 等等。考虑到我正在使用的代码,我想知道发生了什么错误?

代码如下:

QStringList inputArray = input.split('-');
                QByteArray output;

                for(int i = 0; i < inputArray.count(); i++)
                {
                     output.append(inputArray.at(i).toLatin1());
                }

                ui->lineEdit->setText(output);

【问题讨论】:

  • 你的问题——至少对我来说——非常不清楚。所发布的代码完全符合我的预期,导致output 等同于QByteArray("A1B2C3D4E5")
  • I am wondering what wrong has happened? 你和其他人。
  • 我想要做的是完整地添加字节位 - 目前我有像这样填充的 QByteArray bytearray[0]="A",bytearray[1]="1 ",bytearray[2]="B",而我需要它包含其完整值,即 bytearray[0]="A1",bytearray[1]="B2",bytearray[2]="C3"。
  • 听起来你真的想要一个QByteArrayList,而不是一个简单的QByteArray
  • 好吧,不想打扰你,但是一个字节就是一个字符。现在,如果您的 char 对仅包含十六进制符号,即 0-9 和 A-F,您可以将它们转换为字节,因为它们可以容纳在一个字节中。

标签: arrays list qt append qbytearray


【解决方案1】:
qDebug() << QByteArray("ACDC"); // outputs "ACDC"

如果这些字符对确实是十六进制,您需要告诉指定:

qDebug() << QByteArray::fromHex("ACDC"); // outputs "\xAC\xDC"

前一个字节数组有 4 个字节长,而后者只有 2 个字节长,因为每个字符对都被解码为十六进制。

【讨论】:

  • 所以没有办法将 QStringList 块视为十六进制值?
  • QByteArray::fromHex() 正是这样做的,怎么不清楚?只需将代码更改为output.append(QByteArray::fromHex(inputArray.at(i).toLatin1()));
  • 它在“clean all”和“qmake”之后工作。谢谢!
猜你喜欢
  • 2014-08-24
  • 2013-10-16
  • 2015-11-12
  • 2018-02-14
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多