C++中的各种进制转换函数汇总

1.在C中,按指定进制格式输出如下:

#include

#include

using namespace std;

int main()

{

printf(“%o\n”,35); // 八进制格式输出:%o

printf(“%d\n”,35); // 十进制格式输出:%d

printf(“%x”,35); // 十六进格式制输出:%x或者%X

return 0;

}

// 输出结果:

43

35

23

2.在C++中,按指定进制格式输出如下:

#include

using namespace std;

int main()

{

cout<<oct<<35<<endl; // 八进制输出格式 oct

cout<<dec<<35<<endl; // 十进制输出格式 dec

cout<<hex<<35<<endl; // 十六进制输出格式 hex

return 0;

}

// 输出:

43

35

23

3.任意2-36进制数转化为10进制数

  1. 自己写一个函数

建议自己可以去敲一敲,加深记忆

#include

using namespace std;

int turn (string a,int t)

{

int sum=0;

for(int i=a.size()-1;i>=0;i–)

{

if(a[i]>=‘0’&&a[i]<=‘9’)

sum=sum*t+a[i]-‘0’;

else

{

sum=sum*t+a[i]-‘A’+10;

}

}

return sum;

}

int main()

{

string a;

int num,t;

while(cin>>a) // 超过10进制我们以大写字母表示

{

cin>>t; // t代表要转换的进制数

num=turn(a,t);

cout<<num<<endl;

}

return 0;

}

2.strtol函数

long int strtol(const char _nptr, char **endptr, int base)

strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。

参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。

可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。

当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。

strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给_endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr的值,即把第一个非法字符的地址传给endptr。多数情况下,endptr设置为NULL, 即不返回非法字符串。

#include

#include

using namespace std;

int main()

{

char r[100];

int t;

while(~scanf(“%s”,r))

{

cin>>t; // t代表他原来的进制数

cout<<strtol(r,NULL,t)<<endl;

memset(r,‘\0’,sizeof®);

}

return 0;

}

// C++11 特性!!!

注意:

①如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。

②如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。

③如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。

④对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。

4.将10进制数转换为任意的n进制数
  • 建议自己写一个代码:

#include

#include

#include

using namespace std;

stack s;

void turn (int t,int tmp)

{

while(t!=0)

{

if(t%tmp<=10)

s.push(t%tmp+‘0’);

else

s.push(t%tmp-10+‘A’);

t/=tmp;

}

}

int main()

{

int t,tmp;

while(cin>>t>>tmp)

{

turn(t,tmp);

while(!s.empty())

{

cout<<s.top();

s.pop();

}

cout<<endl;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。**

由于文档内容过多,篇幅受限,只能截图展示部分

[外链图片转存中…(img-cXcXjmZH-1713299429562)]

[外链图片转存中…(img-JObwvB45-1713299429565)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C++函数,用于将大整数从一种进制转换为另一种进制: ```cpp #include <iostream> #include <string> #include <algorithm> #include <cmath> using namespace std; string convertBase(string num, int oldBase, int newBase) { int decimalNum = 0; int power = 1; bool isNegative = (num[0] == '-'); // Convert to decimal base for (int i = num.size() - 1; i >= isNegative ? 1 : 0; i--) { int digitValue = isdigit(num[i]) ? num[i] - '0' : num[i] - 'A' + 10; decimalNum += digitValue * power; power *= oldBase; } // Convert to new base string newNum; while (decimalNum > 0) { int remainder = decimalNum % newBase; char digitChar = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A'; newNum += digitChar; decimalNum /= newBase; } if (newNum.empty()) { newNum = "0"; } if (isNegative) { newNum += '-'; } // Reverse the result and return reverse(newNum.begin(), newNum.end()); return newNum; } int main() { string num; int oldBase, newBase; cout << "Enter a number: "; cin >> num; cout << "Enter the old base: "; cin >> oldBase; cout << "Enter the new base: "; cin >> newBase; cout << num << " in base " << oldBase << " is " << convertBase(num, oldBase, newBase) << " in base " << newBase << endl; return 0; } ``` 该函数使用两个参数:要转换的数字和两个进制值(旧进制和新进制)。它首先将该数字转换为十进制,然后将其转换为新进制。在转换过程,该函数会使用余数和商的计算来获得新进制下的每一位。最后,新数被反转并返回。 请注意,此函数仅适用于非负整数。如果输入数字为负数,则应在函数进行适当的更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值