【问题标题】:Check Hexadecimal Representation of a QByteArray检查 QByteArray 的十六进制表示
【发布时间】:2015-08-19 19:27:05
【问题描述】:

如何检查 QByteArray 中的特定值?

类似这样的:

QByteArray example;
//...
example = file.readAll();//fill with data from a file
//...
if(example.mid(0, 2) == 0x0a00)
    //do something

以上都行不通。

我可以这样做,但我目前正在修复性能问题,所以我宁愿必须将其转换为 QString:

QByteArray example;
//...
example = file.readAll();//fill with data from a file
//...
if(example.mid(0, 2).toHex() == "0a00")
    //do something

根据十六进制表示检查 QByteArray 中字节的最快方法是什么?

【问题讨论】:

  • 遗憾地问:“什么是 QByte?”已经过时了。诅咒你比尔考斯比!

标签: c++ qt hex qbytearray


【解决方案1】:

你可以像这样简单地比较。

if(example.mid(0, 2) == "\x0a\x00")

编辑: 这是行不通的。检查下面的评论。

【讨论】:

  • 我刚刚尝试过,当我知道 example.mid(0,2) 为 0a00 时,当尝试你所说的时,它的行为就好像它们不同。
  • 抱歉,需要 QString。使用 [] 运算符而不是 mid 方法怎么样? [] 运算符被覆盖以返回 char。
  • 那我如何一次检查多个字节呢?这会比.mid 慢吗?另外,由于它是只读的,.at() 会不会比 [] 更好?
  • 我认为由于字符串中的 \x00 (即 NUL 终止符),上述内容被绊倒了。 if (example.mid(0, 2) == QByteArray::fromRawData("\x0a\x00", 2)) 怎么样
  • 至于使用[],你显然要if (example[0] == 0x0a && example[1] == 0x00)...
猜你喜欢
  • 2014-08-24
  • 2013-10-16
  • 2019-04-13
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2021-07-12
  • 2014-10-12
  • 2016-03-05
相关资源
最近更新 更多