c++ 进制转化两大法宝 strtol() itoa()

strtol() 将各种进制的数转化为10进制

int strtol(char a[], &stop, int(字符串的进制))

1、第一个参数可以是char []数组,也可以是char *a;
2、第二个参数是数组char stop[];
3、第三个参数是a字符串的进制,转化之后结果都为10进制。

例子
	string strs = "10549stend#12"; 
	char *p=(char*)strs.c_str(); 
	char *stop;  
    int ans=strtol(p, &stop, 8);   //将八进制数1054转成十进制,后面均为非法字符
    printf("%d\n",ans);  
    printf("%s\n", stop); 

输出结果

556
9stend#12

itoa() 10进制转化为各种进制

直接上代码

	char strd[100];  
    _itoa(num, strd, 2);  //c++中一般用_itoa,用itoa也行,
    string ssdd=strd;
    printf("%s\n", strd); 
	cout<<ssdd<<endl; 
	

num 为10进制,strd是用来存转化结果

16进制转化成10进制的方法有很多,以下是两种常用的方法: 1. 直接转换法:将16进制数的每一位转化为10进制数的对应数位,然后相加得到10进制数的结果。 举个例子,将16进制数0x32F转换为10进制数的过程如下: ``` 3 2 F 3*(16^2)+2*(16^1)+15*(16^0)=815 ``` 所以,0x32F转换为10进制数为815。 演示代码如下(C语言)[^1]: ```c #include <stdio.h> #include <stdlib.h> int main() { char hex[10]; printf("Enter the hex number: "); scanf("%s", hex); int dec = strtol(hex, NULL, 16); printf("Decimal number is %d\n", dec); return 0; } ``` 2. 除法取余法:将16进制数每一位乘以对应的权值,然后相加求和,权值为16的幂。例如对于16进制数0x32F,其每一位的权值为16^2、16^1和16^0,所以将0x32F转换为10进制数的过程如下: ``` 3 2 F 16^2 16^1 16^0 -------------------- 768 32 15 ------- ``` 所以,0x32F转换为10进制数为815。 演示代码如下(C语言): ```c #include <stdio.h> #include <math.h> int main() { char hex[10]; int i, length, decimal = 0; printf("Enter the hex number: "); scanf("%s", hex); length = strlen(hex); for (i = 0; hex[i] != '\0'; i++, length--) { if (hex[i] >= '0' && hex[i] <= '9') { decimal += (hex[i] - '0') * pow(16, length - 1); } else if (hex[i] >= 'a' && hex[i] <= 'f') { decimal += (hex[i] - 'a' + 10) * pow(16, length - 1); } else if (hex[i] >= 'A' && hex[i] <= 'F') { decimal += (hex[i] - 'A' + 10) * pow(16, length - 1); } } printf("Decimal number is %d\n", decimal); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值