一.问题分析
我们输入一个真正意义上的十六进制数,0x开头,返回一个十进制数。
二.思路生成
输入一个十六进制的数,依次取出它的每一位,然后根据权值累加,得到10进制值。
三.问题解决及代码
以C++为例
1.如何输入一个16进制数,使用标志符hex,cin>>hex>>"变量名"
如果指定了输入进制数,如上,那么以后你输入的都是hex即16进制格式的数
int n,m,h;
//cin>>hex代表输入的数是16进制的,系统默认是十进制数,
cin >>hex>> n>>m;
//已经改变了输入格式,因此h也是16进制的
cin >> h;
//输出没有改变,则会将16转成10进制输出
cout << n<<" "<<m<<" "<<h<<endl;
输出结果如下,不按照16进制格式即0x输入,系统也会变成16进制数,第二行为10进制输出
2.如何将16进制数n 每一位存储,并且计算各个位的权值,代码如下
void fun3(int n) {
//计算转化十进制后和
unsigned int sum = 0;
//用数组来存储16进制各个位的数据
int i = 0; unsigned int arr2[10];
//每次循环取出最低一位存储到arr2数组里
while (n > 0) {
//取最低位存储到arr2的低位
arr2[i] = n % 16;
//输出每次取的数
cout <<hex<< arr2[i] << " ";
i++;
//移除取出的数
n = n / 16;
}
cout << endl;
//计算权值,例如5fff, 输出第三行即为sum每次累加的值
for (int j = i - 1; j >= 0; j--) {
sum = sum * 16 + arr2[j];
cout << hex << sum << " ";
}
cout << endl;
cout <<dec<< sum << endl;
}
关于输出界面 第二行是每次循环取出的数,第三行是每次sum累加的值,这样更便于理解
C语言实现
下面代码会给到详细注释,这里就不多赘述了
void fun3(int n) {
//计算转化十进制后和
unsigned int sum = 0;
//用数组来存储16进制各个位的数据
int i = 0; unsigned int arr2[10];
//每次循环取出最低一位存储到arr2数组里
while (n > 0) {
//取最低位存储到arr2的i位,i初始值为0
arr2[i] = n % 16;
//输出每次取的数
//%x以hex16进制输出,%o就是oct八进制输出,%d就是dec十进制输出
printf("%x ", arr2[i]);
i++;
//移除取出的数
n = n / 16;
}
printf("\n");
//计算权值,例如5fff, 输出第三行即为sum每次累加的值
for (int j = i - 1; j >= 0; j--) {
sum = sum * 16 + arr2[j];
//输出每次sum累加的值
printf("%x ", sum);
}
printf("\n");
//输出总值
printf("%x\n",sum);
}
关于输出界面 第二行是每次循环取出的数,第三行是每次sum累加的值,这样更便于理解文章来源:https://www.toymoban.com/news/detail-760315.html
文章来源地址https://www.toymoban.com/news/detail-760315.html
到了这里,关于十六进制数如何转十进制 C/C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!