crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

novichkov
  опции профиля:
сообщение 22.2.2012, 14:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Знатоки низкоуровневых функций C/C++! Помогите, пожалуйста, решить проблему.

В одной не очень хорошо написанной программе в файлы описаний данных, которые представляют собой простые ini файлы, разработчик программы пишет действительные параметры в виде
AmplLevel=(0BC0000000000000) <- строковое представление числа в формате double
XStep=(00000000) <- строковое представление числа в формате float

Мне нужно декодировать эти строки, то есть получить соответствующие значения параметров.
Для float решение простое:

char *hex_string = ....
float f;
sscanf(hex_string,"%x",&f);

А вот для double это не работает. Подскажите, как можно переконвертировать строку, чтобы получить нужный результат?

Для справки:
0x 3ff0 0000 0000 0000 = 1
0x 3ff0 0000 0000 0001 ≈ 1.0000000000000002, the next higher number > 1
0x 3ff0 0000 0000 0002 ≈ 1.0000000000000004
0x 4000 0000 0000 0000 = 2
0x c000 0000 0000 0000 = –2
0x3fd5 5555 5555 5555 = 0.333333333333333314829616256247390992939472198486328125
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Влад
  опции профиля:
сообщение 22.2.2012, 16:52
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Тебе нужно просто интерпретировать последовательность байтов как значение другого типа.
    long long x = 0x3ff0000000000000;
    double d = reinterpret_cast<double&>(x);
    std::cout << d << std::endl;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 5:25