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前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由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[]=" \n\t abc";
int ret = strtol(nptr, &endptr, 10 );
由于函数会忽略nptr前面的空格(' ', '\n'...),所以,从字符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会设置相关值
strtol,strtoll,strtoul, strtoull字符串转化成数字的更多相关文章
- js 字符串转化成数字
方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...
- js 字符串转化成数字:(实例:用正则检测大于0的正数,最多保留4位小数)
来源:http://www.cnblogs.com/hwx0807/archive/2011/06/28/2092021.html 实例: function BindSubmitEvent() { / ...
- strtol / strtoll / strtoul / strtoull
function long int strtol (const char* str, char** endptr, int base); —— Convert string to long integ ...
- 通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母
通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母 例如 我的中国心 ==> wdzgx 我的中国心ya ==> wdzgxya woai我的中国 ==> w ...
- c/c++ 数字转成字符串, 字符串转成数字
c/c++ 数字转成字符串, 字符串转成数字 ------转帖 数字转字符串: 用C++的streanstream: #include <sstream> #Include <str ...
- [C#]将千分位字符串转换成数字
关键代码: /// <summary> /// 将千分位字符串转换成数字 /// 说明:将诸如"–111,222,333的千分位"转换成-111222333数字 /// ...
- js将字符串转化成函数:eval(logOutCallbackFun+"()");
js将字符串转化成函数:eval(logOutCallbackFun+"()");
- JavaScript进阶(四)js字符串转换成数字的三种方法
js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...
- js字符串转换成数字与数字转换成字符串的实现方法
转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...
随机推荐
- perl 哈希 连接符
#!/usr/bin/perl -w use strict; my $test_1 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; my $test_2 ...
- RunLoop的深入了解
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...
- iOS开发基础知识碎片
1:contentSize.contentInset和contentOffset区别 contentSize 是scrollview中的一个属性,它代表scrollview中的可显示区域,假如有一个s ...
- 【poj3017】 Cut the Sequence
http://poj.org/problem?id=3017 (题目链接) 题意 给出一个数列要求将它分割成许多块,每块的数的和不超过m,要求每块中最大的数之和最小. Solution 这道题真的很不 ...
- bzoj1102: [POI2007]山峰和山谷Grz
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- cmd执行命令返回执行信息
/// <summary> /// 执行CMD语句 /// </summary> /// <param name="cmd">要执行的CMD命令 ...
- choop.php一句话脚本
<?php$_="";$_[+$_]++;$_=$_.""; $___=$_[+""];//A$____=$___;$____++;/ ...
- waf2控件名
1,查询表格(queryGrid),编辑表格(editGrid) wafGrid 2,快速F7 wafPromptQuick 3,表格F7 wafPromptGrid 4,自定义F7 wafPromp ...
- squid安装配置
Squid做反向代理(192.168.1.69) squid.conf http_port 80 vhost vport visible_hostname pdd2.matrixcdn.net cac ...
- UVA5135 Mining Your Own Business ( 无向图双连通分量)
题目链接 题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点.任意两个连接点之间最多只有一条隧道.任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太 ...