用C++实现:将16进制转换为10进制

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 using namespace std;
 5 int main(void)
 6 {
 7     int n;
 8     int temp;
 9     char* arr = new char[9];       //要给‘\0’留一位
10     cin >> arr;
11     n = strlen(arr);               //计算字符串长度
12     long long sum = 0;             //用long long防止结果过大
13     for (int i = 0; arr[i]!=‘\0‘; i++)         //最后一位是‘\0‘,不用算进去
14     {
15         switch (arr[i])
16         {
17         case ‘A‘: temp = 10; break;
18         case ‘B‘: temp = 11; break;
19         case ‘C‘: temp = 12; break;
20         case ‘D‘: temp = 13; break;
21         case ‘E‘: temp = 14; break;
22         case ‘F‘: temp = 15; break;
23         default: temp = arr[i] - ‘0‘; break;
24         }
25         sum = sum + temp * pow(16, n - 1- i);
26     }
27     cout << sum;
28     return 0;
29 }

注意问题:(1)题目要求不超过8位,也就是说最大可为8位,但是还要考虑字符串数组最后一位必须是‘\0‘,所以创建数组的时候是char[9]而不是char[8]

(2)最后10进制结果用long long而不用int是为了防止结果过大溢出无法表示

(3)关于字符串计数的问题:strlen函数求出的字符串长度是有效长度,是不包含末尾的‘\0‘的,所以在最后求sum的值的时候,用n-1-i而不是减2

补充:

1.strlen()函数求出的字符串长度为有效长度,既不包含字符串末尾结束符 ‘\0’;
2.sizeof()操作符求出的长度包含字符串末尾的结束符 ‘\0’;
3.length()函数求出的字符串长度不包含字符串末尾结束符’\0’;
4.当在函数内部使用sizeof()求解由函数的形参传入的字符数组的长度时,得到的结果为指针的长度,既对应变量的字节数,而不是字符串的长度,此处一定要小心。
5.C/C++的strlen(str)和str.length()和str.size()都可以求字符串长度。其中str.length()和str.size()是用于求string类对象的成员函数,strlen(str)是用于求字符数组的长度,其参数是char*。
6.这三种函数strlen、length、size函数计算的字符串长度都不算最后的操作符’\0’。
7.strlen函数用之前需要先对字符数组定义,例如char str[]={“hello world”};或者char str[]={‘h’,‘e’,‘l’,‘l’,‘o’,’ ‘,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’};
8.getchar()就是从键盘获取字符,直到回车为止。

第一种:strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。

二种:sizeof(),求所占总空间的字节数。

参考链接:https://blog.csdn.net/qq_41823255/article/details/102318011?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158389046319725256732114%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158389046319725256732114&biz_id=0&utm_source=distribute.pc_search_result.none-task

原文地址:https://www.cnblogs.com/guanrongda-KagaSakura/p/12460657.html

时间: 2024-09-30 18:57:01

用C++实现:将16进制转换为10进制的相关文章

c++中便捷的进制转换(输入16进制转换为10进制)

#include<iostream> using namespace std; int main() { int a,b; while(cin >> hex >> a >> b) { cout << dec << a+b << endl; } return 0; }

2进制,10进制,16进制,补码和移位

逢二进一,逢十进一,十六进制 10110101(2) = 128+32+16+4+1 = 181(10) b 5(16) = b*16+5 = 11*16+5 = 181(10) 2进制 int n = 45; System.out.println(Integer.toBinaryString(n)); 计算机的内部(Java)只有2进制数据, 在显示的时候编程语言提供API将2进制转换为10进制显示出来. 计算机只能处理2进制数据, 利用编程语言提供的算法支持了10进制 Java中用于支持2进

PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到. 可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有点要注意下,2.8.16进制转换时,使用的是系统的自己的函数. 所以,不管怎么高精度转换值可能大于2147483646. 另外, 32进制低精转换,最大值:2147483646: 32进制高精转换,最大值:77309411327: 64进制高精转换,最大值:133143986175. jinzhi.ph

java 16进制转换10进制

public static String toHexString2(byte[] b) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; ++i) { buffer.append(toHexString2(b[i])); } return buffer.toString(); } public static String toHexString2(byte b) { char[] buffer =

Java 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8进制.16进制************"); System.out.println(Integer.toBinaryString(i)); // 10转换2进制 System.out.println(Integer.toOctalString(i)); // 10转换8进制 System.out.p

16进制与10进制

16进制 0 1 2 3 4 5 6 7 8 9 a b c d e f. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 0 1 2(16进制中的10 进制表象,进位后,前边一位)10进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20我们的计算机中一般都以16进制保存.我们用的时间就是这种60进制中的10进制表象.

从M进制转换为N进制

/// <summary> /// 从M进制转换为N进制 /// </summary> internal class MBase2NBase { /// <summary> /// M进制值字符串 /// </summary> private string MValue = "123"; /// <summary> /// 除法商 /// </summary> private string Quotient = n

10进制转16进制,16进制转10进制,随机出一个6位十六进制颜色值

方案一: var num16 = "ffffff";var num10 = parseInt(num16,16);//16进制转10进制console.log(num10) // 16777215 var colorNum = Math.round(Math.random()*num10).toString(16);colorNum = ("000000"+colorNum).slice(-6)console.log("#"+colorNum)

Delphi XE2 16进制转10进制《LceMeaning》

以下在编写IC卡项目时出现卡号转换错误时的解决方法,在XE2下测试正常.================================================ uses math; function HexToDec(Hex : string) : string; var i : integer; res : real; len : integer; begin len := length(Trim(Hex)); for i := 1 to len do begin case Hex[