Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2017, 19:34   #1
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 138
По умолчанию Как преобразовать 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, 19:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

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

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

Вот, кстати, код функции, делающей 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 в 19:56.
ivan.tiran вне форума Ответить с цитированием
Старый 12.11.2017, 19:55   #5
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 138
По умолчанию

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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