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