Проверить шестнадцатеричное представление QByteArray

Как проверить определенные значения в 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 на основе их шестнадцатеричного представления?


person mrg95    schedule 05.06.2015    source источник
comment
Грустно спрашивая, что такое QByte? вышел из моды. Будь ты проклят, Билл Косби!   -  person user4581301    schedule 05.06.2015


Ответы (1)


Вы можете сравнить просто так.

если(пример.mid(0, 2) == "\x0a\x00")

Отредактировано: это не работает. Проверьте комментарий ниже.

person Ilho Yu    schedule 05.06.2015
comment
Я только что попробовал это, и когда я ЗНАЮ, что example.mid(0,2) равно 0a00, при попытке сделать то, что вы сказали, это действовало так, как будто они были разными. - person mrg95; 05.06.2015
comment
Извините, что нужен QString. Как насчет использования оператора [] вместо метода mid? Оператор [] переопределен для возврата char. - person Ilho Yu; 05.06.2015
comment
Как тогда мне проверить несколько байтов за раз? Будет ли это медленнее, чем .mid? Кроме того, поскольку он доступен только для чтения, не будет ли .at() лучше, чем []? - person mrg95; 05.06.2015
comment
Я думаю, что вышеизложенное срабатывает из-за \x00 (т.е. терминатора NUL) в строке. Как насчет if (example.mid(0, 2) == QByteArray::fromRawData("\x0a\x00", 2)) - person Hamish Moffatt; 05.06.2015
comment
Что касается использования [], вы, очевидно, хотите if (example[0] == 0x0a && example[1] == 0x00)... - person Hamish Moffatt; 05.06.2015
comment
Спасибо, Хэмиш. К сожалению, простое добавление еще одного условия в оператор if не сработало бы для всего моего проекта, поскольку иногда я проверяю большие объемы данных, чем два байта. Кроме того, fromRawData действительно работал. :) Вы не знаете, работает ли toHex быстрее или медленнее, чем fromRawData? - person mrg95; 05.06.2015