长字符串转换为数字

本文详细介绍了C++中如何使用strtoul和strtoull函数将字符串转换为无符号长整型和无符号长长整型,包括函数的参数、返回值及异常处理。同时,提供了C++11之前的替代方案_strtoi64的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义于头文件 <cstdlib>

  

unsigned long      strtoul( const char *str, char **str_end, int base );

  

unsigned long long strtoull( const char *str, char **str_end, int base );

 (C++11 起)
   

转译 str 所指的字符串中的无符号整数值。

舍弃所有空白符(以调用 isspace() 鉴别),直到找到首个非空白符,然后取尽可能多的字符组成底 n (其中 n=base )的无符号整数表示,并将它们转换成一个整数值。合法的无符号整数值由下列部分组成:

  • (可选)正或负号
  • (可选)指示八进制底的前缀( 0 )(仅当底为 8 或 ​0​ 时应用)
  • (可选)指示十六进制底的前缀( 0x 或 0X )(仅当底为 16 或 ​0​ 时应用)
  • 一个数字序列

底的合法集是 {0,2,3,...,36} 。合法数字集对于底 2 整数是 {0,1},对于底3整数是 {0,1,2} ,以此类推。对于大于 10 的底,合法数字包含字母字符,从对于底 11 整数的 Aa 到对于底36整数的 Zz 。忽略字符大小写。

当前安装的 C 本地环境可能接受另外的数字格式。

若 base 为 ​0​ ,则自动检测数值进制:若前缀为 0 ,则底为八进制,若前缀为 0x 或 0X ,则底为十六进制,否则底为十进制。

若符号是输入序列的一部分,则对从数字序列计算得来的数字值取反,如同用结果类型的一元减,它对无符号整数应用回卷规则。

函数设置 str_end 所指向的指针指向最后一个被转译字符的后一字符。若 str_end 等于 NULL ,则忽略它。

参数

str-指向要被转译的空终止字符串的指针
str_end-指向指向字符的指针的指针。
base-被转译整数值的

返回值

成功时为对应 str 内容的整数值。若被转换值落在对应返回类型的范围外,则发生值域错误( errno 被设为 ERANGE )并返回 ULONG_MAX 或 ULLONG_MAX 。若无转换可进行,则返回 ​0​ 。

 

当然, 如果不是c++11标准,可以使用_strtoi64, 具体用法如下:

char *str = "80000cdfdfdef";
char *res = NULL;
int ret = 0;
ret = _strtoi64(str, &res, 16);
printf("%lld\n", ret);

可以将"80000cdfdfdef"-->80000cdfdfdef

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值