Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 12.11.2017, 20:34   #1
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию Как преобразовать unsigned int в float, а unsigned long int в double?

Доброго времени суток.
Разбираю файл, в котором зашифрованы числовые вектора.

Как сделать преобразование, указанное в заголовке?

Так

Код:
unsigned int k;

float b = (float)k;


unsigned long int f;

double g = (double)f;
выдаёт мне целую часть с нулевым значением после запятой.
А мне нужно, чтобы в double и float записалось число, которое хранит знак и мантиссу.
Как это сделать?
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 20:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,956
По умолчанию

b =k;
b =k +0;
b =k*1.0;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.11.2017, 20:46   #3
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
b =k;
b =k +0;
b =k*1.0;
Не понял.
Это три варианта, как можно преобразовать unsigned int к float?
(float) - лишний здесь?
У меня, как целая часть с нулевым остатком была, так и есть.
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 20:51   #4
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

Вот, кстати, код функции, делающей double преобразование.

Код:
double getDoubleVar(unsigned short int *ar)
{
    double retVar = 0;

    unsigned long int tempVar;

    unsigned long int var0,var1,var2,var3;

    var0 = (unsigned long int)*ar;
    var1 = (unsigned long int)*(ar + 1);
    var1 = (var1 << 16);
    var2 = (unsigned long int)*(ar + 2);
    var2 = (var2 << 32);
    var3 = (unsigned long int)*(ar + 3);
    var3 = (var3 << 48);


    tempVar = (var0 | var1 | var2 | var3);


    retVar = (double)tempVar+0;


    return retVar;
}
Суть в том, что массив хранит 4 элемента unsigned short int
Их я должен склеить в один unsigned long int и преобразовать в double.

У меня ещё закралось предположение, что я слова не в том порядке склеиваю.

Последний раз редактировалось ivan.tiran; 12.11.2017 в 20:56.
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 20:55   #5
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

логично, что старшее слово должно быть слева. Но, всё равно преобразуются большие целые части.
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 21:10   #6
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

Мне кажется, меня никто не понял.

Вопрос из разряда - взять double из bytearray.

Только у меня массив unsigned short int - 2 байта.
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 21:16   #7
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

как я понял, надо memcpy использовать.
ivan.tiran вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача С++ с использованием unsigned int Fllyber Помощь студентам 20 04.07.2011 20:19
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, listiksasha Фриланс 4 21.02.2011 13:26
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, listiksasha Помощь студентам 2 20.02.2011 13:57
[РЕШЕНО][C] unsigned int аргумент работает как signed Sfuller Общие вопросы C/C++ 2 30.06.2010 18:17