• strtol,strtoll,strtoul, strtoull字符串转化成数字


     

    今天看kafka,有一个参数选项中有: 'S'   seq=strtoull(optarg,NULL,10);

                        do_seq=1;

    之后查找了下 strtoull 函数的功能,了解如下:

    -----------------------------------

    from:http://zengwu3915.blog.163.com/blog/static/27834897201262562912597/

    名字:

    strtol, strtoll, strtoul, strtoull

    convert a string to a (signed, unsigned ) long integer string

    声明:

    #include<stdlib.h> ( 这个是C标准库,与linux无关。这套函数是通用的。)

    long int strtol(const char *nptr, char **endptr, int base);
    long long int strtoll(const char *nptr, char **endptr, int base);

    unsigned long int strtoul(const char *nptr, char **endptr, int base);
    unsigned long long int strtoull(const char *nptr, char **endptr, int base);

    说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36

    这几个函数会忽略nptr前面的空格( ' ', ' ', ' ' 'f', 'v' ' ' ,由isspace判定为真的字符)

    while (*nptr && isspace ( *nptr ) ) ++ nptr;

    然后遇到非合法字符结束;

    base = 2; 合法字符为0, 1

    base = 3; 合法字符为0,1, 2

    ...

    base = 11; 合法字符为0,1,...,9,a(A)

    ...

    base = 36;合法字符为0, 1, ...,9,a(A),...,z(Z)。

    字符 a-z,是忽略大小写的,混着来也行,例如 strtol("aA", NULL, 11)依然能得到正确的结果。

    函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。

    如果没有合法字符,则 *endptr = nptr,函数返回0.

    例如:

    1.

    char *endptr;

    char nptr[]="123abc";

    int ret = strtol(npstr, &endptr, 10 );

    由于10进制里没有“数字”a,所以扫描到a,结束。

    这样 ret = 123;

    endptr = &nptr[3]; ( printf("%s", endptr);将得到字符串 abc )

    2.

    char nptr[]="     abc";

    int ret = strtol(nptr, &endptr, 10 );

    由于函数会忽略nptr前面的空格(' ', ' '...),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。

    所以函数结束。 ret=0; endptr = nptr;

    以下的讨论,会认为 nptr 前面没有空格,

    即执行过类似于while (*nptr  &&isspace ( *nptr ) ) ++ nptr;

    如果base 为0.则分3种情况:

    如果nptr 以0x(零x)开头,则把nptr当成16进制处理。

    如果npstr以0(零)开头,则把nptr当成8进制处理。

    否则,把nptr当成10进制。

    对于函数执行错误,如传了一个非合法base,则errno会设置相关值

     
     
     
  • 相关阅读:
    第二阶段个人总结7
    第二阶段个人总结6
    第十七周进度报告
    个人总结
    十六周进度报告
    人月神话阅读笔记3
    十五周进度报告
    十四周进度报告
    人月神话阅读笔记2
    购买图书
  • 原文地址:https://www.cnblogs.com/the-tops/p/5799547.html
Copyright © 2020-2023  润新知