Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ivan10msk от Февраль 05, 2021, 17:09



Название: вывод hex файла
Отправлено: ivan10msk от Февраль 05, 2021, 17:09
Здравствуйте!
Подскажите пожалуйста простое решение как мне создать  hex файл. Нужно грубо говоря значение счётчика в hex виде выводить в файл
Спасибо!


Название: Re: вывод hex файла
Отправлено: Mikhail от Февраль 05, 2021, 18:34
 Что это такое hex файл?
Не знаю такого.
Файл - это набор байт и не более.
Другое дело что можно просто выводить текстовые данные в файл, а можно бинарные. Но все равно это набор байт.
Пример:
1) текстовое представление
07 a1 c5 <перевод строки>
11 a7 bа <перевод строки>
2) бинарное представление 07a1c511a7ba


Название: Re: вывод hex файла
Отправлено: tux от Февраль 06, 2021, 14:11
Если я правильно понял вопрос, то можно так:
Код:
    int cnt = 500;
    QByteArray ba;
    ba.append((char *)&cnt, sizeof(cnt));
    QString temp = ba.toHex();
В temp упадет строка "f4010000" - как раз шестнадцатиричное значение 500.
P.S. Если не нравится, что это не то, что выдаёт калькулятор (байты переставлены местами), то тут могу посоветовать почитать индейцев. :) При обратном преобразовании на той же машине получится 500.


Название: Re: вывод hex файла
Отправлено: ivan10msk от Февраль 06, 2021, 15:58
Спасибо большое!!

Да, именно бинарное, подскажите пожалуйста а как запихнуть этот массив в файл и его создать ?


Название: Re: вывод hex файла
Отправлено: tux от Февраль 06, 2021, 16:38
Опять гадать приходится. :)
Какой массив? Вы же хотели "счётчик в hex виде" - я вам показал, как сделать строку, содержающую это hex значение. Открываете файл на запись, записываете эту строку туда, закрываете файл - победа!
Это - один из вариантов. Можно ещё проще
Код:
QString temp = QString("%1").arg(cnt, 8, 16, QChar('0'));


Название: Re: вывод hex файла
Отправлено: ivan10msk от Февраль 06, 2021, 18:51
Спасибо за поддержку!
Я имел ввиду создание файла в итоге после исполнения программы
Нужен на выходе файл с содержанием бинарного градиента, который не нужно набивать в ручную)


Название: Re: вывод hex файла
Отправлено: tux от Февраль 06, 2021, 21:18
Так в документации же есть
Код:
     QFile file("out.txt");
     if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
         return;

     QString temp = QString("%1").arg(cnt, 8, 16, QChar('0'));

     file.write(temp);
     file.close();


Название: Re: вывод hex файла
Отправлено: ivan10msk от Февраль 07, 2021, 20:14
Спасибо, получилось в итоге со Qtextstrem почти то что хотелось
https://dropmefiles.com/EcDdk
Проблема в том что когда я пытался сделать на QFile я никак не смог справиться с ошибкой при компиляции
Ошибка: no matching function for call to 'QFile::write
Сейчас все так но формат не тот. Нужно чтобы было вот так:
00010002000300040005...027D027E027F
00010002000300040005...027D027E027F
..
00010002000300040005...027D027E027F
Т.е каждое хекс представление должно быть 2-х байтное, сначала идет старший потом младший


Название: Re: вывод hex файла
Отправлено: tux от Февраль 07, 2021, 20:33
Я вам показал аж 2 варианта: с большим индийцем и с маленьким. Выбирайте, какой вам нужен. :)
Или это уже продолжение задачи?


Название: Re: вывод hex файла
Отправлено: ivan10msk от Февраль 11, 2021, 16:14
Спасибо в итоге разобрался!
Единственное не пойму почему когда делаешь файл через QTextStream данные в шестнадцатиричном виде в far не видятся как хекс и в проводнике  размер файла больше ожидаемого в два раза. В блокноте вижу шестнадцатиричном представление.
Когда делаешь на основе QDataStream  все ок(размер и hex в far), единственное в блокноте наблюдается  не шестнадцатиричное представление.


Название: Re: вывод hex файла
Отправлено: tux от Февраль 11, 2021, 16:30
'01020304' == 0x01020304
Но по размеру первое (строка) будет больше второго в 2 раза. :)


Название: Re: вывод hex файла
Отправлено: kambala от Февраль 11, 2021, 17:27
Спасибо в итоге разобрался!
Единственное не пойму почему когда делаешь файл через QTextStream данные в шестнадцатиричном виде в far не видятся как хекс и в проводнике  размер файла больше ожидаемого в два раза. В блокноте вижу шестнадцатиричном представление.
Когда делаешь на основе QDataStream  все ок(размер и hex в far), единственное в блокноте наблюдается  не шестнадцатиричное представление.
почитай как хранятся данные в компьютере, что такое байты, что есть строка в С и т.д... тут реально надо азы изучать.


Название: Re: вывод hex файла
Отправлено: Igors от Февраль 12, 2021, 08:09
Спасибо в итоге разобрался!
Единственное не пойму ...
Цитировать
Вот, товарищи колхозники, вам электричество! Теперь старые керосиновые лампы не нужны, вот здесь включаете - и свет горит. Все ясно?

- Ясно! А куда керосин заливать?
Вы не первый (и не последний) кто действует по принципу "что я теряю?". Подскажут - хорошо, нет - ну ладно. Это корректно - но не продуктивно. Вы теряете время и "на что-то надеетесь". Самостоятельное освоить что такое "символ" и как он связан с "байтом" - гораздо быстрее, да и толку больше