[转](25条消息) c++ uint32转为int

这篇文章主要介绍了轻松实现C/C++各种常见进制相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
(adsbygoogle = window.adsbygoogle || []).push({});
其它进制转为十进制
在实现这个需求之前,先简单介绍一个c标准库中的一个函数:
?
1 long strtol( const char *str, char **str_end, int base);
参数详细说明请 参考文档
注意:这个函数在c标准库stdlib中,所以需要 #include<cstdlib>
用法参考

 #include <stdio.h> 
#include <errno.h> 
#include <stdlib.h> 
  
int main(void) 
{ 
 // parsing with error handling 
 const char *p = "10 200000000000000000000000000000 30 -40 junk"; 
 printf("Parsing '%s':n", p); 
 char *end; 
 for (long i = strtol(p, &end, 10);p != end;i = strtol(p, &end, 10)) 
 { 
 printf("'%.*s' -> ", (int)(end-p), p); 
 p = end; 
 if (errno == ERANGE){ 
 printf("range error, got "); 
 errno = 0; 
 } 
 printf("%ldn", i); 
 } 
  
 // parsing without error handling 
 printf(""1010" in binary --> %ldn", strtol("1010",NULL,2)); 
 printf(""12" in octal --> %ldn", strtol("12",NULL,8)); 
 printf(""A" in hex --> %ldn", strtol("A",NULL,16)); 
 printf(""junk" in base-36 --> %ldn", strtol("junk",NULL,36)); 
 printf(""012" in auto-detected base --> %ldn", strtol("012",NULL,0)); 
 printf(""0xA" in auto-detected base --> %ldn", strtol("0xA",NULL,0)); 
 printf(""junk" in auto-detected base --> %ldn", strtol("junk",NULL,0)); 
}


Output

    ?
 Parsing '10 200000000000000000000000000000 30 -40 junk': 
'10' -> 10 
' 200000000000000000000000000000' -> range error, got 9223372036854775807 
' 30' -> 30 
' -40' -> -40 
"1010" in binary --> 10 
"12" in octal --> 10 
"A" in hex --> 10 
"junk" in base-36 --> 926192 
"012" in auto-detected base --> 10 
"0xA" in auto-detected base --> 10 
"junk" in auto-detected base --> 0


更多详细说明请 参考文档
接下来使用这个函数来实现其它进制转为十进制的需求,具体请参考代码:

 #include<iostream> 
#include<cstdlib> 
using namespace std; 
int main(){ 
 //把8进制的17转化为10进制打印输出 
 string str = "17"; 
 char *tmp ; 
 long result = strtol(str.c_str(),&tmp,8); 
 cout<<result; 
 return 0; 
}


Output


15十进制转为其他进制
目前没有找到可以使用的库函数来方便的实现这个需求,所以自己实现了一下,具体请参考代码:

#include<iostream> 
#include<algorithm> 
using namespace std; 
//digital为10进制数,r为需要转换的目标进制,返回目标进制数 
string dtox(int digital,int r){ 
 string result=""; 
 const char s[37]="0123456789abcdefghijklmnopqrstuvwxyz"; 
 if(digital==0){ 
 return "0"; 
 } 
 while(digital!=0){ 
 int tmp =digital%r; 
 result+=s[tmp]; 
 digital/=r; 
 } 
 reverse(result.begin(),result.end()); 
 return result; 
} 
int main(){ 
 cout<<"十进制10转为16进制结果:"<<dtox(10,16)<<endl; 
 cout<<"十进制10转为8进制结果:"<<dtox(10,8)<<endl; 
 cout<<"十进制10转为2进制结果:"<<dtox(10,2)<<endl; 
 cout<<"十进制10转为10进制结果:"<<dtox(10,10)<<endl; 
}
 Output:
    ?

十进制10转为16进制结果:a 十进制10转为8进制结果:12 十进制10转为2进制结果:1010 十进制10转为10进制结果:10
实现效果还算理想,另外,这个函数还可以把10进制数转化为不常用的其他进制,不局限于2,8,10,16等常见进制。但是r的有效范围应该为2-36。另外,函数并没有考虑负数以及浮点数,r不合法的情况
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


---------------------
作者:weixin_39852953
来源:CSDN
原文:https://blog.csdn.net/weixin_39852953/article/details/110590905
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值