十六进制转float
#include <stdio.h>
#include <stdlib.h>
#include<iostream> //c++中的头文件,调用c++系统程序
using namespace std; //c++命名空间(调用关键字的命名含义)
#include<string> //引用字符串
int sum=0; //整数全局变量
double sum_xiaoshu = 0; //小数全局变量
int main()
{
string num; //输入16进制的数
int i = 0, count;
bool xiaoshu = false; //判断是否有小数点
std::string x, y;
printf("输入想要转换的16进制数:");
cin >> num; //键盘输入
count = num.length(); 所输入16进制数的长度
char dianhao='.'; //判断是否有小数点
for (i = count - 1; i >= 0; i--) //遍历num元素,判断是否有小数点
{
if (num[i] == dianhao) //判断是否有小数点
{
// cout << "有小数点,索引值为" << i << endl;
x = num.substr(0, i); //截取整数部分,截取索引值为0到索引值为i的部分
// cout <<"整数部分为:"<<x<<endl;
y = num.substr(i+1,count); //截取小数部分
// cout << "小数部分为:" << y << endl;
xiaoshu = true;
num = x; //整数部分重新赋值给num
count = num.length(); //判断整数的长度
break;
}
else //若输入的16进制数没有小数
{
count = num.length();
}
}
printf("转换成10进制数后是:");
for (i=count-1; i>=0; i--) //整数转换
{
if (num[i] >= '0'&&num[i] <= '9')//数字字符的转换
{
sum += (num[i] - 48)*pow(16, count - i - 1); //参照ascii码表相差48位,pow为指数,幂为count - i - 1
}
else if (num[i] >= 'A'&&num[i] <= 'F')//字母字符的转换
{
sum += (num[i] - 55)*pow(16, count - i - 1); 参照ascii码表相差55位,pow为指数,幂为count - i - 1
}
else if (num[i] >= 'a'&&num[i] <= 'f')//字母字符的转换
{
sum += (num[i] - 87)*pow(16, count - i - 1);//参照ascii码表相差87位
}
}
if (xiaoshu) //小数转十进制
{
int count_xiaoshu= y.length();
for (i = count_xiaoshu - 1; i >= 0; i--)
{
if (y[i] >= '0'&&y[i] <= '9')//数字字符的转换
{
sum_xiaoshu += (y[i] - 48)*pow(16, -i-1);
}
else if (y[i] >= 'A'&&y[i] <= 'F')//字母字符的转换
{
sum_xiaoshu += (y[i] - 55)*pow(16, -i - 1);
}
else if (y[i] >= 'a'&&y[i] <= 'f')//字母字符的转换
{
sum_xiaoshu += (y[i] - 87)*pow(16, -i - 1);
}
}
}
cout << sum+ sum_xiaoshu <<endl; //小数部分与整数相加
system("pause"); //暂停结果显示
return 0;
}
float转十六进制
#include <stdio.h>
#include <stdlib.h>
#include<iostream> //c++中的头文件,调用c++系统程序
using namespace std; //c++命名空间(调用关键字的命名含义)
#include<string> //引用字符串
void Conversion1(int num1, int a[], int &i) //整数部分转16进制
{
do
{
a[i] = num1 % 16; //取余保存在数组a中
num1 = num1 / 16;
i++;
} while (num1); //当num1<16时,退出循环
i--;
}
void Conversion2(double num2, int b[], int &j) //小数部分转16进制
{
double temp = num2;
do
{
temp = temp * 16; //乘以16并取整,存入数组b
b[j] = (int)temp;
temp = temp - b[j];
j++;
} while (j!=5); //精确到小数点后5位
j--;
}
int main()
{
double num;
int a[100], b[100], i = 0,j=0;
printf("输入想要转换的10进制数:");
cin >> num;
printf("转换成16进制数后是:");
int num1 = (int)num;
Conversion1(num1, a, i); //整数部分转换
for (int n = i; n >= 0; n--) //转换完后需要把余数为10—15的数转换为ABCDEF,并且余数需要逆排序
{
if (a[n] >= 10) //如果余数大于10
{
a[n] += 55; //ABCDEF中ASCII对照表 ABCDEF
printf("%c", a[n]);
}
else
{
printf("%d", a[n]);
}
}
//小数部分转换
double num2 = num - (int)num; //获取小数
if (num2) //如果有小数
{
cout << ".";
Conversion2(num2, b, j); //小数部分转换
for (int m = 0; m <=j; m++) //转换完后需要把整数10—15的数转换为ABCDEF,正排顺序
{
if (b[m] >= 10)
{
b[m] += 55; //ABCDEF中ASCII对照表
printf("%c", b[m]);
}
else
{
printf("%d", b[m]);
}
}
}
cout << endl;
system("pause"); //暂停结果显示
return 0;
}
更多推荐
float与十六进制之间的转换
发布评论