C/C++进制转换 逃离我推掉我的手 2023-10-03 18:44 2阅读 0赞 ## 进制转换 ## ### 一:指定格式输出(10进制转其他进制输出) ### #### 1.在C中 #### 按指定[进制][Link 1]格式输出如下, printf("%05o\n",35); //按八进制格式输出,保留5位高位补零 printf("%03d\n",35); //按十进制格式输出,保留3位高位补零 printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零 #### 2.在C++中 #### 按指定进制格式输出如下, #include <bitset> #include<iostream> using namespace std; int main() { cout << "35的8进制:" << std::oct << 35<< endl; cout << "35的10进制" << std::dec << 35 << endl; cout << "35的16进制:" << std::hex << 35 << endl; cout << "35的2进制: " << bitset<8>(35) << endl; //<8>:表示保留8位输出 return 0; } ### 二:C/C++各种进制转换库函数 ### #### 一)任意2-36进制数转化为10进制数。 #### **strtol()函数** 函数原型: long int strtol(const char \*nptr, char \*\*endptr, int base) base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如: #include<cstdio> int main() { char buffer[20]="10549stend#12"; char *stop; int ans=strtol(buffer, &stop, 8); //将八进制数1054转成十进制,后面均为非法字符 printf("%d\n",ans); printf("%s\n", stop); return 0; } /* 输出结果: 556 9stend#12*/ **注意:** 注意要转化的字符串是c风格字符串(char)(可考虑用c\_str())和放非法字符的字符串是char \*,别把星号忘了!!! string a; char *b; a="30"; int res = strtol(a.c_str(),&b,8); cout<<res; ①如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。 ②如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。 ③如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。 ④对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。 #### 二)将10进制数转换为任意的n进制数,结果为char型。 #### **itoa()函数**(可以将一个10进制数转换为任意的2-36进制字符串) 函数原型:char\*itoa(int value,char \*string, int radix); 例如:itoa(num, str, 2); num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。 #include<cstdio> #include<cstdlib> int main() { int num = 10; char str[100]; _itoa(num, str, 2); //c++中一般用_itoa,用itoa也行, printf("%s\n", str); return 0; } 注意存放结果的是char数组!!!! ### 三:使用字符串流stringstream(头文件\#include) ### 1.将八,十六进制转十进制。 #include<iostream> #include<string> #include<sstream> using namespace std; int main(void) { string s="20"; int a; stringstream ss; ss<<hex<<s; //以16进制读入流中 ss>>a; //10进制int型输出 cout<<a<<endl; return 0; } //输出:32 2.将十进制转八,十六进制。 #include<cstdio> #include<iostream> #include<string> #include<sstream> using namespace std; int main(void) { string s1,s2; int a=30; stringstream ss; ss<<oct<<a; //10进制转成八进制读入流中,再以字符串输出 ss>>s1; cout<<s1<<endl; //输出:36 ss.clear(); //不清空可能会出错。 ss<<hex<<a; //10进制转成十六进制读入流中,,再以字符串输出 ss>>s2; cout<<s2<<endl; //输出:1e return 0; } #include <bits/stdc++.h> using namespace std; int main(){ // 2-36->10 string a; char *b; a="30"; int res = strtol(a.c_str(),&b,8); cout<<res; cout<<endl; // 10->2-36 int num = 10; // string res_str; char res_str[100]; _itoa(num,res_str,2); cout<<res_str; cout<<endl; cout<<std::oct<<35<<endl; cout<<std::dec<<35<<endl; cout<<std::hex<<35<<endl; cout<<bitset<8>(35)<<endl; } 参考文章: [C++中的各种进制转换函数汇总][C] [Link 1]: https://so.csdn.net/so/search?q=%E8%BF%9B%E5%88%B6&spm=1001.2101.3001.7020 [C]: https://blog.csdn.net/vir_lee/article/details/80645066
相关 进制转换(进制转换) 进制转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe 秒速五厘米/ 2022年08月02日 15:41/ 0 赞/ 304 阅读
相关 进制转换 题目:请自定义函数,并根据用户选择进行数据进制转换(注意完善相应的用户提示),十六进制数和十进制数互换,二进制数和十进制数互换,八进制数和十进制数互换。 \include<s 男娘i/ 2022年07月14日 14:50/ 0 赞/ 267 阅读
相关 进制转换 进制 A:是一种进位的方式。 B:任意的X进制,表示逢X进一。 C:0,1,2,3...9 \-- 10 二进制 其实就是用0和1表示的数据。 数据类 ﹏ヽ暗。殇╰゛Y/ 2022年07月12日 13:20/ 0 赞/ 115 阅读
相关 进制转换 输入一个以回车符结束的字符串(少于100个),过滤去所有的非十六进制字符后,组成一个新字符(十六进制形式),输出该字符串并将其转换为十进制数后输出。 include 谁践踏了优雅/ 2022年06月17日 01:41/ 0 赞/ 284 阅读
相关 进制转换 class ArrayTest1 { //十进制-->二进制 public static void toBin(int num r囧r小猫/ 2022年06月13日 13:46/ 0 赞/ 291 阅读
相关 进制转换 //十进制转二进制 public void toBinary(int num) { StringBuffer buffer = new StringBuffer 亦凉/ 2022年06月01日 09:20/ 0 赞/ 259 阅读
相关 进制转换 Problem Description 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R 以你之姓@/ 2022年05月11日 05:48/ 0 赞/ 250 阅读
相关 进制转换 进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一 梦里梦外;/ 2021年12月12日 02:09/ 0 赞/ 1044 阅读
相关 进制转换 有以下程序 main( ) { int x=102,y=012; printf("%2d,%2d\n",x,y); } 执行后 r囧r小猫/ 2021年09月30日 06:38/ 0 赞/ 440 阅读
相关 javascript 进制转换(2进制、8进制、10进制、16进制之间的转换) //十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); 不念不忘少年蓝@/ 2021年09月29日 13:46/ 0 赞/ 511 阅读
还没有评论,来说两句吧...