我是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;
}
因此,我假设我能够访问组成浮点数的字节。但是,你能否提出任何想法将其转换为十六进制。我想,我必须能够阅读所有这些背后的二进制文件...但我不确定如何。
注意: 我了解如何从二进制转换为十六进制
答案 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::dec
和std::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