建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

ttking

发帖: 364粉丝: 21

发消息 + 关注

更新于2020年10月11日 21:43:28 541 3
直达本楼层的链接
楼主
显示全部楼层
[技术干货] C语言如何按任意进制数取出字符串中的长整数?strtol()!

>C 库函数 long int strtol(const char *str, char **ptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。 有时候,我们需要将字符串中的数字转换成16进制数,这时我们可以使用strtol() **头文件** ```c #include <stdlib.h> ``` ### **参数:** >strtol(const char *str, char **ptr, int base) - str -- 要转换为长整数的字符串。 - ptr -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。 - base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。 ### **参数解析:** strtol() 会将参数 str 字符串根据参数 base 来转换成长整型数(long)。参数 base 范围从2 至36,或0。base 代表 str 采用的进制方式,如base 值为10 则采用10 进制,若base 值为16 则采用16 进制等。 strtol() 会扫描参数 str 字符串,跳过前面的空白字符(例如空格),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。 **两点注意:** - 当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,遇到 '0' 前置字符则会使用 8 进制转换。 - 若ptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 ptr 传回;若 ptr 为 NULL,则表示该参数无效,或不使用该参数。 ### 示例 >比如有这么一个字符串 “123456abcdefg”,我们需要取出长整数。 ```c #include <stdio.h> #include <stdlib.h> int main(void) { char str[15] = "123456abcdefg"; char *ptr; long Number; Number= strtol(str, &ptr, 10); //十进制 printf("取出来的长整数是 %ld\r\n", Number); printf("剩下的字符串部分是 %s\r\n", ptr); return 0; } ``` **结果:** ``` 取出来的长整数是 123456 剩下的字符串部分是 abcdefg ``` ### 在单片机上的应用 在stm32的rtc时钟中,我们在进行网络对表时,需要往RTC时钟写入16进制的时间(BCD码),此时可以通过此函数进行转换
举报
分享

分享文章到朋友圈

分享文章到微博

scu-w

发帖: 317粉丝: 8

发消息 + 关注

发表于2020年10月13日 15:01:33
直达本楼层的链接
沙发
显示全部楼层

感谢分享!

点赞 评论 引用 举报

极客潇

发帖: 456粉丝: 67

发消息 + 关注

发表于2020年10月13日 17:04:12
直达本楼层的链接
板凳
显示全部楼层

来学习下

点赞 评论 引用 举报

柠檬PH=2

发帖: 361粉丝: 44

发消息 + 关注

发表于2020年10月13日 22:58:36
直达本楼层的链接
地板
显示全部楼层

学习了,感谢分享

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册