Russian Qt Forum
Ноябрь 25, 2024, 05:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: BinToHex преобразование  (Прочитано 6839 раз)
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 и как?

Всем спасибо за дискуссию и ответы.
Записан
DmP
Гость
« Ответ #1 : Май 18, 2011, 18:50 »

QString QString::number () [static]
Записан
blood_shadow
Гость
« Ответ #2 : Май 18, 2011, 19:00 »

сначала:
Код
C++ (Qt)
QByteArray QByteArray::toHex () const
 
потом
Код
C++ (Qt)
QByteArray QByteArray::number ( int n, int base = 16 )
 
Записан
smirnoff
Гость
« Ответ #3 : Май 18, 2011, 19:11 »

Спасибо всем. После долгих мучений решил так:
Код:
int i_kol = QString(QString(kol[0])).toAscii().toHex().toInt();
Записан
blood_shadow
Гость
« Ответ #4 : Май 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!";
Записан
smirnoff
Гость
« Ответ #5 : Май 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!";

Да. Спасибо. Исправил.
Записан
ритт
Гость
« Ответ #6 : Май 18, 2011, 20:16 »

жестоко...
Записан
smirnoff
Гость
« Ответ #7 : Май 18, 2011, 20:25 »

жестоко...
Не мы такие - жизнь такая ))))
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Май 18, 2011, 21:12 »

пипец...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Май 18, 2011, 21:37 »

Код
C++ (Qt)
QFile file(filename);
if(file.open(QIODevice::ReadOnly))
{
QDataStream in(&file);
quint8 number;
in >> number;
...
}
как-то попроще будет
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 23.