在c ++中用十六进制转换fl

时间:2014-12-03 06:59:30

标签: c++ floating-point hex

我是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;
    }


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


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

3 个答案:

答案 0 :(得分:0)

iostream可以用十六进制打印数字:

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;

} 

答案 1 :(得分:0)

你想要的可能是这样的:

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;
}

答案 2 :(得分:0)

这里有一个小错误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;

您可以使用<iomanip>中的std::setw()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