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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вывод hex файла  (Прочитано 4824 раз)
ivan10msk
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« : Февраль 05, 2021, 17:09 »

Здравствуйте!
Подскажите пожалуйста простое решение как мне создать  hex файл. Нужно грубо говоря значение счётчика в hex виде выводить в файл
Спасибо!
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Февраль 05, 2021, 18:34 »

 Что это такое hex файл?
Не знаю такого.
Файл - это набор байт и не более.
Другое дело что можно просто выводить текстовые данные в файл, а можно бинарные. Но все равно это набор байт.
Пример:
1) текстовое представление
07 a1 c5 <перевод строки>
11 a7 bа <перевод строки>
2) бинарное представление 07a1c511a7ba
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #2 : Февраль 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.
« Последнее редактирование: Февраль 06, 2021, 14:14 от tux » Записан

ivan10msk
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #3 : Февраль 06, 2021, 15:58 »

Спасибо большое!!

Да, именно бинарное, подскажите пожалуйста а как запихнуть этот массив в файл и его создать ?
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #4 : Февраль 06, 2021, 16:38 »

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

ivan10msk
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #5 : Февраль 06, 2021, 18:51 »

Спасибо за поддержку!
Я имел ввиду создание файла в итоге после исполнения программы
Нужен на выходе файл с содержанием бинарного градиента, который не нужно набивать в ручную)
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #6 : Февраль 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();
Записан

ivan10msk
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #7 : Февраль 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-х байтное, сначала идет старший потом младший
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #8 : Февраль 07, 2021, 20:33 »

Я вам показал аж 2 варианта: с большим индийцем и с маленьким. Выбирайте, какой вам нужен. Улыбающийся
Или это уже продолжение задачи?
« Последнее редактирование: Февраль 07, 2021, 20:36 от tux » Записан

ivan10msk
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #9 : Февраль 11, 2021, 16:14 »

Спасибо в итоге разобрался!
Единственное не пойму почему когда делаешь файл через QTextStream данные в шестнадцатиричном виде в far не видятся как хекс и в проводнике  размер файла больше ожидаемого в два раза. В блокноте вижу шестнадцатиричном представление.
Когда делаешь на основе QDataStream  все ок(размер и hex в far), единственное в блокноте наблюдается  не шестнадцатиричное представление.
« Последнее редактирование: Февраль 11, 2021, 16:16 от ivan10msk » Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #10 : Февраль 11, 2021, 16:30 »

'01020304' == 0x01020304
Но по размеру первое (строка) будет больше второго в 2 раза. Улыбающийся
Записан

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Февраль 11, 2021, 17:27 »

Спасибо в итоге разобрался!
Единственное не пойму почему когда делаешь файл через QTextStream данные в шестнадцатиричном виде в far не видятся как хекс и в проводнике  размер файла больше ожидаемого в два раза. В блокноте вижу шестнадцатиричном представление.
Когда делаешь на основе QDataStream  все ок(размер и hex в far), единственное в блокноте наблюдается  не шестнадцатиричное представление.
почитай как хранятся данные в компьютере, что такое байты, что есть строка в С и т.д... тут реально надо азы изучать.
Записан

Изучением 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
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Февраль 12, 2021, 08:09 »

Спасибо в итоге разобрался!
Единственное не пойму ...
Цитировать
Вот, товарищи колхозники, вам электричество! Теперь старые керосиновые лампы не нужны, вот здесь включаете - и свет горит. Все ясно?

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


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