繁体   English   中英

在C ++中以十六进制转换fl

[英]Converting fl in hexadecimal in c++

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


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


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

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;

} 

您想要的可能是这样的:

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;

您可以使用<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM