其函数原型如下:
unsigned long strtoul(const char *nptr,char **endptr,int base )
参数1:字符串起始地址
参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。
参数3:转换基数。当base=0,自动判断字符串的类型,并按10进制输出,例如"0xa",就会把字符串当做16进制处理,输出的为10。更多的下面详细阐述。
测试结果:
10
9
123
10
3
35
4 如果base=n(1<n<=36),为什么可取到36,很简单,10个数字+26个字母=36。
5 如果base=1时呢? 经测试出现调试错误,也很简单,你听过1进制数吗?!。
unsigned long strtoul(const char *nptr,char **endptr,int base )
参数1:字符串起始地址
参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。
参数3:转换基数。当base=0,自动判断字符串的类型,并按10进制输出,例如"0xa",就会把字符串当做16进制处理,输出的为10。更多的下面详细阐述。
贴上函数原型
- include "stdafx.h"
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- unsigned int num1,num2,num3 ,num4,num5,num6 ;
- char *stop_at =NULL ;
- char temp1[16] = "0xa" ;
- char temp2[16] = "011" ;
- char temp3[16] = "123" ;
- char temp4[16] = "0xa" ;
- char temp5[16] = "11" ;
- char temp6[16] = "Z" ;
- //if base==0
- num1=strtol(temp1,&stop_at,0);
- num2=strtol(temp2,&stop_at,0);
- num3=strtol(temp3,&stop_at,0);
- //if base>1 && base <=32
- num4=strtol(temp4,&stop_at,16);
- num5=strtol(temp5,&stop_at,2);
- num6=strtol(temp6,&stop_at,36);
- cout<<num1<<endl;
- cout<<num2<<endl;
- cout<<num3<<endl;
- cout<<num4<<endl;
- cout<<num5<<endl;
- cout<<num6<<endl;
- return 0;
- }
10
9
123
10
3
35
注意:1 如果字符串以非数字开始,返回值0。
2 基数表示把字符串里的数字当做base进制处理,输出的结果把base进制转换成了10进制。
4 如果base=n(1<n<=36),为什么可取到36,很简单,10个数字+26个字母=36。
5 如果base=1时呢? 经测试出现调试错误,也很简单,你听过1进制数吗?!。
6 尾指针指向字符串有效数字的结束地址。