1、strtol()函数。功能:将2-36进制的数转换为10进制的数。头文件:#include<stdlib.h>
long int strtol (const char* str, char** endptr, int base);
返回值为long int型数据。
<1>.str是有效的n(2<=n<=36)进制的字符串:由n进制每个数位上的数组成,str[0]是最高位的数字,最后一个字符是最低位上的数字。
<2>.endptr是无效的n进制的字符串:由从第一不符合n进制的字符开始到最后一个字符的字符串组成。
<3>.base表示str代表的进制(2<=base<=36)。
char x[6]={"234a4"};
char *y;
printf("%d\n",strtol(x,&y,8));
printf("%s\n",y);
输出结果:
另外,如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。
最后,需要说明的是,对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。
2、itoa()函数。功能:将10进制的数转换为n(2<=n<36)进制。头文件:#include<stdlib.h>
char * itoa ( int value, char * str, int base );
返回值为字符数组,与strtol恰好相反。
<1>.value是十进制数字。<2>.str是存放n进制的字符数组。<3>.base是转换的目标进制。
int x=19960915;
char y[100];
itoa(x,y,16);
printf("%s\n",y);
输出结果:
3、还有指定的进制转换。
std::bitset(转2进制),std::oct(转8进制),std::dec (转10进制),std::hex(转16进制)。头文件:#include <bitset>
cout << "36的8进制:" << std::oct << 36 << endl;
cout << "36的10进制" << std::dec << 36 << endl;
cout << "36的16进制:" << std::hex << 36 << endl;
cout << "36的2进制: " << bitset<8>(36) << endl;
输出结果: