在 c++ 中将 fl 转换为十六进制

Converting fl in hexadecimal in c++

本文关键字:十六进制 转换 fl c++ 中将      更新时间:2023-10-16

我是C++和编程新手,我想编写一个C++程序,在指针的帮助下将浮点数转换为十六进制

我查看了其他线程,并真的试图掌握这一点,但似乎无法弄清楚。这是我到目前为止所做的:

int main()
{
    float number = -12.0
    unsigned char *ptr = ((unsigned char*) &number);
    for (int i = 0; i < sizeof(float); i++)
    {
        cout << "Byte "  [i] << "is : " << ptr[i] << endl;
    }


因此,我假设我能够访问构成浮点数的字节。 但是,您能否提出任何将其转换为十六进制的想法。我想,我必须能够阅读这一切背后的二进制文件......但我真的不确定如何。


注意:我了解如何从二进制转换为十六进制<</p>

div class="answers">

iostreams 可以打印十六进制的数字:

int main() {
float number=-1.0;
unsigned char *ptr = ((unsigned char*)&number);
for (int i = 0; i < sizeof(float); i++)
{
    cout << "Byte ";
    cout << setw(0) << dec << i << "is : ";
    cout << setw(2) << setfill('0') << hex << ptr[i] << endl;
} 

你想要的可能是这样的:

float number=-1.0;
char cz[]="0123456789ABCDEF";
int si=sizeof(float);
char* ptr=(char*)(&number);
for(int i=0;si-i;++i){
    std::cout<<cz[((*ptr)&0xf0)>>4]<<cz[(*ptr)&0x0f]<<' ';
    ++ptr;
}

这里有小错误cout << "Byte " [i]这与执行相同:

const char *text = "Byte ";
cout << text[i]

另一个小错误是ptr[] char因此cout将其视为可打印字符(而不是数字),使用(int)ptr[i]就可以了。此外,您希望打印i为十进制,ptr[i]为十六进制,因此您必须使用std::decstd::hex

cout << "Byte " << std::dec << i << " is : " << std::hex << (int)ptr[i] << endl;

您可以使用std::setw()<iomanip> std::setfill()对其进行一些润色:

#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;
int main()
{
    float number = -1.0;
    unsigned char *ptr = ((unsigned char*) &number);
    cout << std::setfill('0');
    for (int i = 0; i < sizeof(float); i++)
    {
        cout << "Byte " 
             << std::dec << std::setw(0) << i << " is : " 
             << std::hex << std::setw(2) << (int)ptr[i] << endl;
    }
    return 0;
}

这将打印出:

Byte 0 is : 00
Byte 1 is : 00
Byte 2 is : 80
Byte 3 is : bf