Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 4

Double to hex и обратно

10.10.2019, 08:38. Показов 7984. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какое бы ни было число в памяти компьютера всё равно оно представлено в виде 0 и 1, как всем известно. Мне нужно преобразовать double в hex, чтобы хранить его в целочисленной константе enum (а enum как известно это тот же int). Мой план действий состоит в следующем:

C++
1
2
3
4
5
6
7
8
enum FloatEnum {
  e1=[значение в hex] // например, 1.5
};
 
double hexToDouble(int hexVal){
  // обратное преобразование в hexVal значение double
  return doubleRet;
}
Чтобы записать double в целочисленный enum я набросал следующую программу:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "pch.h"
#include <iostream>
using namespace std;
 
void proc() {
  double start;
  double end;
  double step;
  cout << "Input start" << "\n";
  cin >> start;
  cout << "Input end" << "\n";
  cin >> end;
  cout << "Input step" << "\n";
  cin >> step;
  int n = int((end - start) / step);
  cout << "Count: " << n + 1 << "\n";
  int i = 0;
  double ret;
  while (i < n)
  {
    ret = start + step * i;
    printf("val%i: %0*.*f\n", i + 1, 5, 2, ret);
    i++;
  }
  printf("val%i: %0*.*f\n", n + 1, 5, 2, end);
}
 
int main()
{
  setlocale(LC_ALL, "en");
  int inp;
  while (true)
  {
    std::cout << "Press 1 to continue or press any key to exit. \n";
    std::cin >> inp;
    if (inp == 1)
      proc();
    else
      break;
  }
  system("exit");
}
Как можно увидеть из кода программы она выдает вещественные числа в заданном диапазоне с заданным шагом. Получившийся результат легко скопировать и вставить в свой код. Как сделать так, чтобы программа выводила в консоль числа double в hex формате, чтобы записать их в enum а затем, конвертировать обратно с помощью функции hexToDouble?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2019, 08:38
Ответы с готовыми решениями:

float в HEX и обратно
У меня возникли трудности с конвертацией числа типа float (например 2.534) в 4 байта HEX (например строка FFAAFFAA) и обратно. Тип числа...

Как перевести строку в hex и обратно?
Немогу найти в гугле функцию какбы перевести строку в hex и обратно, мб у кого завалялась?

Конвертирование числа double в hex string и обратно
Нашел отличный код ' This uses .NET converters to convert from double to hex string and back Dim D As Double = 255.68 Dim I64...

2
317 / 268 / 61
Регистрация: 12.10.2011
Сообщений: 434
10.10.2019, 10:06
Лучший ответ Сообщение было отмечено Cyberdev как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
static union {
    uint64_t uu;
    double d;
} Converter;
 
uint64_t DoubleToHex(double val)
{
    Converter.d = val;
    return Converter.uu;
}
 
double HexToDouble(uint64_t val)
{
    Converter.uu = val;
    return Converter.d;
}
 
int main()
{
    double val = 1.23;
    uint64_t hex_ = DoubleToHex(val);
    cout << hex << hex_ << " " << dec << HexToDouble(hex_) << endl;
 
    return 0;
}
Code
1
2
3
    
Success #stdin #stdout 0s 4488KB
3ff3ae147ae147ae 1.23
Мне нужно преобразовать double в hex, чтобы хранить его в целочисленной константе enum
Зачем??? Чем константы не устраивают. Тем более double(8 байт) в int(~4 байта) не влезет
1
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 4
10.10.2019, 11:15  [ТС]
Цитата Сообщение от golatin Посмотреть сообщение
Зачем??? Чем константы не устраивают. Тем более double(8 байт) в int(~4 байта) не влезет
Просто для моей задачи нужно именно такое представление, в качестве констант enum'a. Тогда с ними очень легко работать. На самом деле мне не обязательно double, потому как и float мне больше чем достаточно. Переделал Ваш пример на float, всё работает как часы Огромное Вам спасибо!

Добавлено через 21 минуту
Хотя, uint32_t (в случае с преобразованием float в hex) исчисляется начиная от 0, в то время как int (в данном случае enum) от -2 147 483 648, если я правильно всё понимаю... Могут ли возникать проблемы при конвертации или uint32_t корректно впишется в enum?

Добавлено через 9 минут
Порядок. Вместо uint32_t использовал int32_t. По идее, должно работать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2019, 11:15
Помогаю со студенческими работами здесь

Текст в HEX и обратно
Привет, мне надо сделать что-то подобное этому: Я создаю систему ключей для программы и хочу применить хитрую систему, пусть её легко...

Перевод текста в HEX и обратно
Как можно с помощью JavaScript перевести текст в HEX и обратно? Надо что бы переводилась строка также и в кириллице. Можно в ANSI...

Перевод из текста в hex и обратно
Доброго времени суток. Прошу помощи в решении задачи: в edit вводим текст к примеру &quot;Конст&quot;, по нажатию button1 в edit2 переводит...

TColor->HEX->String->File и обратно
Никто не подскажет, как это сделать - вроде как пытался так: tmpSt:='AAE2B0' ...

Перевод содержимого файла в hex и обратно
Здравствуйте, есть необходимость создания hex редактора в QT, так с открытием файла разобрался считывая содержимое файла при помощи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru