Форум программистов, компьютерный форум CyberForum.ru

Считывание float из файла в шестнадцатиричном виде - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вектора и массивы http://www.cyberforum.ru/cpp-beginners/thread907958.html
Дани вектора \bar{x} та \bar{y} з n координатами и квадратные матрицы А та В, розмером n*n. Найти вектор \bar{Z} =A* \bar{x} + B* \bar{y} .
C++ Проводник Windows Как из кода запустить проводник Windows для записи файла? http://www.cyberforum.ru/cpp-beginners/thread907953.html
Написать программу нахождения первого отрицательного элемента одномерного числового массива C++
пропустил тему не могу сообразить... есле кто то может написать программу, помогите! Буду благодарен Написать программу нахождения первого отрицательного элемента одномерного числового массива.
C++ Заполнение матрицы змейкой
Здравствуйте, нужно заполнить матрицу змейкой(картинка змейки вложена). Матрица NxN (1<=N<=10), заполнить числами от 1 до N^2 - 1 по змейке. Не знаю даже как составить алгоритм заполнения, подскажите хоть что-нибудь.
C++ Получить все числа, входящие в последовательность только один раз http://www.cyberforum.ru/cpp-beginners/thread907864.html
Даны массив целых чисел. Получить все числа, входящие в последовательность только один раз.
C++ Вычислить y Параметр цикла с индексной переменной: Обозначение индекса - k Номер индекса - 1 1.3 2 -1.6 3 -2.3 1 4.51 2 -4.16 3 2.61 4 7.28 подробнее

Показать сообщение отдельно
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
20.06.2013, 19:39     Считывание float из файла в шестнадцатиричном виде
Скиньте тестовый файл чтобы проверить.

Добавлено через 1 минуту
Desu_Is_A_Lie, просили же для чисел с плавающей запятой, а std::hex с таким не справляется. Это было бы через чур просто

Добавлено через 3 минуты
В общем, проверяйте...
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
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream file("input.txt");
    ofstream out("output.txt");
    if (!file.good() || !out.good()) return -1;
    string hex_value;
 
    const float _2pow23 = static_cast<float>( 1 << 23 );
 
    while ( getline(file, hex_value) ) {
        if (hex_value[0] == 'r') continue;
        remove_if( hex_value.begin(), hex_value.end(), ::isspace );
        hex_value.insert(0, "0x");
        unsigned int bits = stod(hex_value);
        int S = bits >> 31;
        int E = (bits << 1) >> 24;
        int M = (bits << 9) >> 9;
        float x = (S ? -1.0 : 1.0 ) *
            powf(2.0, E - 127.0) * //E - 127.0 может быть отрицательным
            (1.0 + M / _2pow23 );
        out << fixed << x << endl;
    }
    file.close();
    out.close();
    return 0;
}
Кликните здесь для просмотра всего текста
3E4CCCCD
431BA000
41 A5 54 6D


Кликните здесь для просмотра всего текста
0.200000
155.625000
20.666224


Добавлено через 44 секунды
Забыл сказать, что это для чисел одинарной точности, то есть порядка не более 10^38
 
Текущее время: 07:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru