strtol strtoll strtoul strtoull应用

在项目开发时,字符串跟整形的转换是普遍需求的一个功能,在c/c++中常用的几个函数包括

strtol strtoll strtoul strtoull。

目前我们的项目里面进行转换的时候都是直接调用,对被转换的字符串是否有效,转换是否成功都没有一个基本的判断,一直想研究下,今天正好有空,仔细看了下linux man page中这几个函数的详细解释.

声明

#include <stdlib.h>

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);

功能:

这一组函数根据指定的进制base(2-36或者0,为0时根据字符串自动推断转换的进制)将nptr指向的字符串转换为对应的整形。

nptr可以以多个空格(isspace函数返回true的字符)开头,接着也可以有'+'或者'-'正负符号标记。如果base是16或者是0,接下来可以有“0x”的前缀,此时字符串将会当作16进制数字进行转换;如果接下的字符是‘0’,将会被当作8进制进行转换;除此之外都会被当作默认的十进制。

除了前缀之外其余的字符串将会被转换为对应的整形,并且会在给定进制base的第一个非有效数字字符终止(对于10以上的进制,'A'表示10,‘11’表示B,以此类推,'Z'表示35)。

如果endptr是非空,则endptr将会保存nptr中第一个指定进制base的无效字符串的地址;如果不存在有效字符串,则endptr会保存原始nptr的地址,并且返回0。通常情况,如果*nptr值不为'\0',返回时**endptr值为'\0',整个nptr字符串都是无效的。说明

在项目开发时,字符串跟整形的转换是普遍需求的一个功能,在c/c++中常用的几个函数包括

strtolstrtoll strtoul strtoull

目前我们的项目里面进行转换的时候都是直接调用,对被转换的字符串是否有效,转换是否成功都没有一个基本的判断,一直想研究下,今天正好有空,仔细看了下linux man page中这几个函数的详细解释.

声明

#include<stdlib.h>

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

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

unsignedlong int strtoul(const char *nptr, char **endptr, int base);

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

功能:

这一组函数根据指定的进制base(2-36或者0,为0时根据字符串自动推断转换的进制)将nptr指向的字符串转换为对应的整形。

nptr可以以多个空格(isspace函数返回true的字符)开头,接着也可以有'+'或者'-'正负符号标记。如果base是16或者是0,接下来可以有“0x”的前缀,此时字符串将会当作16进制数字进行转换;如果接下的字符是‘0’,将会被当作8进制进行转换;除此之外都会被当作默认的十进制。

除了前缀之外其余的字符串将会被转换为对应的整形,并且会在给定进制base的第一个非有效数字字符终止(对于10以上的进制,'A'表示10,‘11’表示B,以此类推,'Z'表示35)。

如果endptr是非空,则endptr将会保存nptr中第一个指定进制base的无效字符串的地址;如果不存在有效字符串,则endptr会保存原始nptr的地址,并且返回0。通常情况,如果*nptr值不为'\0',返回时**endptr值为'\0',整个nptr字符串都是无效的。



猜你喜欢

转载自blog.csdn.net/HelloEarth_/article/details/79457582
今日推荐