Russian Qt Forum

Qt => Общие вопросы => Тема начата: smirnoff от Май 18, 2011, 18:33



Название: BinToHex преобразование
Отправлено: smirnoff от Май 18, 2011, 18:33
Доброго всем времени суток.

Столкнулся с такой проблемой:
Есть некий файл в котором записано число в двоичном формате, т.е. если в посмотреть в шестнадцатеричном виде будет, например, или 03, что соответствует числам 12 и 3 соответственно.
Я читаю файл так:
Код:
QFile file(filename);
if(file.open(QIODevice::ReadOnly))
       {
         char kol[1];
         QDataStream in(&file);

         in.readRawData(kol, 1);
...

Соответственно в col имеем абракадабру.
Вопрос: как преобразовать абракадабру в число (тип int или QString)?

P.S. Есть аналогичное решение, реализованное в Borland C++ Builder 6:
Код:
h = CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);

ReadFile(h, &_kss, 4, &t, NULL);
char ttt[8] = "";
BinToHex(_kss, ttt, 8);
double hex = 0;
hex = StrToInt("0x" + String(ttt, 8));
ts3->Add(FloatToStr(hex/1000000));

Соответственно ts3 это что-то типа StringList, в строки которого добавляются значения.

К сожалению в Qt нет функции BinToHex (я не нашел). Возможно ли реализовать подобное средствами Qt и как?

Всем спасибо за дискуссию и ответы.


Название: Re: BinToHex преобразование
Отправлено: DmP от Май 18, 2011, 18:50
QString QString::number () [static] (http://doc.qt.nokia.com/4.7/qstring.html#number-4)


Название: Re: BinToHex преобразование
Отправлено: blood_shadow от Май 18, 2011, 19:00
сначала:
Код
C++ (Qt)
QByteArray QByteArray::toHex () const
 
потом
Код
C++ (Qt)
QByteArray QByteArray::number ( int n, int base = 16 )
 


Название: Re: BinToHex преобразование
Отправлено: smirnoff от Май 18, 2011, 19:11
Спасибо всем. После долгих мучений решил так:
Код:
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt();


Название: Re: BinToHex преобразование
Отправлено: blood_shadow от Май 18, 2011, 19:16
Спасибо всем. После долгих мучений решил так:
Код:
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt();
это неправильно будет работать, так как у ф-ции toInt() аргумент по-умолчанию, который
отвечает за базу числа = 10, тебе надо так:
Код:
int ok = false;
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt(&ok, 16);
if (!ok)
    qDebug() << "Failure!";


Название: Re: BinToHex преобразование
Отправлено: smirnoff от Май 18, 2011, 20:05
Спасибо всем. После долгих мучений решил так:
Код:
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt();
это неправильно будет работать, так как у ф-ции toInt() аргумент по-умолчанию, который
отвечает за базу числа = 10, тебе надо так:
Код:
int ok = false;
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt(&ok, 16);
if (!ok)
    qDebug() << "Failure!";

Да. Спасибо. Исправил.


Название: Re: BinToHex преобразование
Отправлено: ритт от Май 18, 2011, 20:16
жестоко...


Название: Re: BinToHex преобразование
Отправлено: smirnoff от Май 18, 2011, 20:25
жестоко...
Не мы такие - жизнь такая ))))


Название: Re: BinToHex преобразование
Отправлено: Авварон от Май 18, 2011, 21:12
пипец...


Название: Re: BinToHex преобразование
Отправлено: kambala от Май 18, 2011, 21:37
Код
C++ (Qt)
QFile file(filename);
if(file.open(QIODevice::ReadOnly))
{
QDataStream in(&file);
quint8 number;
in >> number;
...
}
как-то попроще будет