c++ - 如何在 C++ 中将十六进制转换为 IEEE 754 32 位 float

标签 c++ c floating-point ieee-754

我正在尝试转换存储为 int 的十六进制值,并使用 IEEE 32 位规则将它们转换为 float 。我特别努力为尾数和指数获取正确的值。十六进制存储在十六进制文件中。我想要四个有效数字。下面是我的代码。

float floatizeMe(unsigned int myNumba ) {
    //// myNumba comes in as 32 bits or 8 byte  

    unsigned int  sign = (myNumba & 0x007fffff) >>31;
    unsigned int  exponent = ((myNumba & 0x7f800000) >> 23)- 0x7F;
    unsigned int  mantissa = (myNumba & 0x007fffff) ;
    float  value = 0;
    float mantissa2; 

    cout << endl<< "mantissa is : " << dec << mantissa << endl;

    unsigned    int m1 = mantissa & 0x00400000 >> 23;
    unsigned    int m2 = mantissa & 0x00200000 >> 22;
    unsigned    int m3 = mantissa & 0x00080000 >> 21;
    unsigned    int m4 = mantissa & 0x00040000 >> 20;

    mantissa2 = m1 * (2 ^ -1) + m2*(2 ^ -2) + m3*(2 ^ -3) + m4*(2 ^ -4);

    cout << "\nsign is: " << dec << sign << endl;
    cout << "exponent is : " << dec << exponent << endl;
    cout << "mantissa  2 is : " << dec << mantissa2 << endl;

    // if above this number it is negative 
    if ( sign  == 1)
        sign = -1; 

    // if above this number it is positive 
    else {
        sign = 1;
    }

    value = (-1^sign) * (1+mantissa2) * (2 ^ exponent);
    cout << dec << "Float value is: " << value << "\n\n\n";

    return value;
}




  int main()
{   
    ifstream myfile("input.txt");
    if (myfile.is_open())
    {
        unsigned int a, b,b1; // Hex 
        float c, d, e; // Dec
        int choice; 

        unsigned int ex1 = 0;
        unsigned int ex2 = 1;
        myfile >> std::hex;
        myfile >> a >> b ;
        floatizeMe(a);
myfile.close();
return 0;

最佳答案

我怀疑你的意思是^

mantissa2 = m1 * (2 ^ -1) + m2*(2 ^ -2) + m3*(2 ^ -3) + m4*(2 ^ -4);

意思是“以……的力量”。 C 或 C++ 中没有这样的运算符。 ^ 运算符是按位异或运算符。

关于c++ - 如何在 C++ 中将十六进制转换为 IEEE 754 32 位 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960456/

相关文章:

c++ - 如果在函数中修改了指针,为什么要返回指向对象的指针?

c - 如何改变C中数组的大小?

c - 获取错误的字符串长度

c++ - 替代 C++11 的 std::nextafter 和 std::nexttoward for C++03?

bash - 使用 float 时的语法错误

c# - 在 C# 中避免数字格式中的额外零

c++ - 一些适用于 Ubuntu (Gnome) 的优秀 C++ IDE?

c++ - 我正在尝试在 C++ 中制作一个介于 5 和 8 之间的随机数生成器

c++ - 应用于空范围的标准算法 any_of()、all_of() 和 none_of()

c - 多线程应用程序中的 printf 笑话?