2013-09-21 386 views
0

在我的项目我有十六进制值(大端)将十六进制转换为二进制到十六进制?

QString hex_in("413DF3EBA463B0"); 

我怎么能转换hex_in为圆角双为QString? IEEE 754(https://en.wikipedia.org/wiki/Double_precision_floating-point_format

34.5 

用户将编辑的双,然后我的程序需要将其转换回为十六进制。

感谢您的时间:)

+2

如何是十六进制字符串和双相关?字符串是double的二进制内存布局的表示吗?什么编码? IEEE? – IInspectable

+0

对不起,IEEE 754.这个字符串是double的十六进制表示。 – mrg95

+0

Big Endian或Little Endian? – 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

我不是将字符串转换为数字,我想要字符串表示的十六进制数字转换为数字。除非我误解了你的答案? – mrg95

+0

@ mc360pro但是没有办法知道一个字符串可能代表什么数字,而没有将字符串*转换为*该数字。 –

+0

这就是我想要做的。将此十六进制值转换为数字。不会转换只是字符串转换为双重转换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 
相关问题