strtoul函数的使用


前言

在学习free type的时候遇到strtoul()函数的使用,记录一下学习结果


一、函数原型

unsigned long strtoul(const char* nptr, char** endptr, int base);
nptr:要转换的字符串
endptr:一个指向字符指针的指针,用于指示转换结束后未使用的字符部分。如果为NULL,不会返回未使用的字符。
base:表示进制,可以是 0281016。如果设置为0,则根据字符串的前缀(0x或0X表示16进制,0表示8进制)来自动判断进制。否则,根据给定的进制进行转换。

二、函数功能实现原理

  • strtoul 从字符串的开头开始扫描,跳过前导的空格字符(空格、制表符)
  • 遇到正负号,会自动解释为非法字符,停止扫描并返回0
  • strtoul将数字字符逐个转换为数字,并计算结果。遇到非数字字符,或达到字符串末尾,停止转换
  • 如果遇到非法字符,endptr 将指向该字符位置,除非 endptr 为NULL。
  • 如果没有转换任何数字字符,strtoul 返回0,并将 endptr 设置为 nptr 的值.

三、函数的测试代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char* str1 = "    12345abc789";//有前导、非数字字符 
    const char* str2 = "abc789";//有前导、非数字字符 
    const char* str3 = "+-123456abc789";//正负号判断对非法字符 
    
    const char* str4 = "100123abc";//2进制显示,到了2就开始非法,应输出B1001的十进制数值9 
	const char* str5 = "123456789abc";//8进制显示 到了8就开始非法,应输出O1234567的十进制数值342391 
    
    char* end;
    unsigned long str1_num , str2_num , str3_num , str4_num, str5_num;
    
	str1_num = strtoul(str1, &end, 10);//将字符串里的十进制数字返回给num 
    printf("str1 转换的数字字符: %lu\n", str1_num);
    printf("str1 剩余字符 : %s\n", end);//整个字符串的剩余部分 
    
    printf("\n");
    
    str2_num = strtoul(str2, &end, 10);//将字符串里的十进制数字返回给num 
    printf("str2 转换的数字字符: %lu\n", str2_num);
    printf("str2 剩余字符 : %s\n", end);//整个字符串的剩余部分 
    
    printf("\n");
    
    str3_num = strtoul(str3, &end, 10);//将字符串里的十进制数字返回给num 
    printf("str3 转换的数字字符: %lu\n", str3_num);
    printf("str3 剩余字符 : %s\n", end);//整个字符串的剩余部分 
	
	printf("\n");
	
	str4_num = strtoul(str4, &end, 2);//2进制 进制表示的是字符串里的数字是什么进制 
    printf("str4 转换的数字字符: %lu\n", str4_num);
    
    printf("\n");
    
	str5_num = strtoul(str5, &end, 8);//8进制 进制表示的是字符串里的数字是什么进制 
    printf("str5 转换的数字字符: %lu\n", str5_num);
    return 0;
}
运行结果:
    str1 转换的数字字符: 12345
    str1 剩余字符 : abc789

    str2 转换的数字字符: 0
    str2 剩余字符 : abc789

    str3 转换的数字字符: 0
    str3 剩余字符 : +-123456abc789

    str4 转换的数字字符: 9

    str5 转换的数字字符: 342391

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strtoul函数是C标准库中的一个函数,其功能是将字符串转换为无符号长整型数(unsigned long)。 strtoul函数的原型如下: unsigned long strtoul(const char *str, char **endptr, int base); 其中,str是要进行转换的字符串;endptr是指向第一个无法被转换的字符的指针;base表示转换时所使用的进制数。 strtoul函数具体的转换过程如下: 1. 从字符串的开头开始遍历,直到遇到第一个非空格字符或者非数字字符。 2. 如果第一个非空格字符是加号或者减号,则分别判断该符号的正负,并从下一个字符开始继续遍历。 3. 判断第一个非空格字符之后的字符是否合法,如果不是数字字符,则停止转换,将endptr指针指向这个非法字符。 4. 根据所给的进制数base,将字符逐个转换为数字。 5. 如果转换过程中遇到非数字字符或者超过了unsigned long类型的范围,则停止转换,将endptr指针指向转换停止的位置。 6. 如果转换成功,返回转换后的无符号长整型数。 以下是一个使用strtoul函数的例子: ``` #include <stdio.h> #include <stdlib.h> int main() { char str[] = "12345"; char *endptr; unsigned long num = strtoul(str, &endptr, 10); printf("Number: %lu\n", num); printf("Endptr: %s\n", endptr); return 0; } ``` 输出结果为: ``` Number: 12345 Endptr: ``` 其中,Number表示转换后的无符号长整型数,Endptr指向的是字符串的末尾。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值