2013-09-21 5 views
0

В моем проекте у меня есть QString с шестнадцатеричным (Big Endian)Преобразование шестнадцатиричного в два раза в шестнадцатеричное?

QString hex_in("413DF3EBA463B0"); 

Как я могу преобразовать hex_in в закругленном двойной? IEEE 754 (https://en.wikipedia.org/wiki/Double_precision_floating-point_format)

34.5 

Пользователь будет редактировать двойной, а затем моя программа должна преобразовать его обратно в шестнадцатеричном.

Спасибо за ваше время :)

+2

Как шестнадцатеричная строка и дважды связанные? Является ли строка представлением двоичной схемы памяти двойника? Какая кодировка? IEEE? – IInspectable

+0

Извините за путаницу, IEEE 754. Строка представляет собой шестнадцатеричное представление двойника. – mrg95

+0

Большой Эндиан или Маленький Эндиан? – IInspectable

ответ

5

Существует лишь один способ сделать это, и это, чтобы преобразовать строку в целое число, положить его в union где вы настроили элемент целочисленного и зачитал double участник.

Для преобразования строк вы можете использовать, например. one of these functions.


Пример кода:

double hexstr2double(const std::string& hexstr) 
{ 
    union 
    { 
     long long i; 
     double d; 
    } value; 

    value.i = std::stoll(hexstr, nullptr, 16); 

    return value.d; 
} 

// ... 

std::cout << "413DF3EBA463B0 = " << hexstr2double("413DF3EBA463B0") << '\n'; 

Выход кода выше

 
413DF3EBA463B0 = 1.91824e-307 
+0

Я не преобразовываю строку в число, я хочу, что строка представляет, hex, для преобразования в число. Разве я не понял ваш ответ? – mrg95

+0

@ mc360pro Но нет способа узнать, какое число может представлять строка, не преобразовывая строку * в * это число. –

+0

Вот что я пытаюсь сделать. Преобразуйте это шестнадцатеричное значение в число. Не конвертировал бы JUST строку в двойное преобразование символов ascii или что-то еще, а не то, что означают фактические значения шестнадцатеричных значений? – mrg95

0
double HexToDouble(AnsiString str) 
{ 
    double hx ; 
    int nn,r; 
    char * ch = str.c_str(); 
    char * p,pp; 
    for (int i = 1; i <= str.Length(); i++) 
    { 
    r = str.Length() - i; 
    pp = ch[r]; 
    nn = strtoul(&pp, &p, 16); 
    hx = hx + nn * pow(16 , i-1); 
    } 
    return hx; 
} 

моя функция для большой шестигранной цифры

результат

72850ccbb88c6226afed9d8d971c8938  -->  1.5222282653101E+38  
000015d85a903c72b6bebdd18fb26811  -->  4.4307191280143E+32 
Смежные вопросы