大家好,欢迎来到IT知识分享网。
文章目录
前言
在学习free type的时候遇到strtoul()函数的使用,记录一下学习结果
一、函数原型
unsigned long strtoul(const char* nptr, char** endptr, int base); nptr:要转换的字符串 endptr:一个指向字符指针的指针,用于指示转换结束后未使用的字符部分。如果为NULL,不会返回未使用的字符。 base:表示进制,可以是 0,2,8,10 或 16。如果设置为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 = "+-abc789";//正负号判断对非法字符 const char* str4 = "abc";//2进制显示,到了2就开始非法,应输出B1001的十进制数值9 const char* str5 = "abc";//8进制显示 到了8就开始非法,应输出O的十进制数值 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 剩余字符 : +-abc789 str4 转换的数字字符: 9 str5 转换的数字字符:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120289.html