Linux内核使用的字符串转整形数和16进制数
kstrtouint和kstrtou8函数定义在文件kernel/lib/kstrtox.c中,原形如下:
233 /**234 * kstrtoint - convert a string to an int235 * @s: The start of the string. The string must be null-terminated, and may also236 * include a single newline before its terminating null. The first character237 * may also be a plus sign or a minus sign.238 * @base: The number base to use. The maximum supported base is 16. If base is239 * given as 0, then the base of the string is automatically detected with the240 * conventional semantics - If it begins with 0x the number will be parsed as a241 * hexadecimal (case insensitive), if it otherwise begins with 0, it will be242 * parsed as an octal number. Otherwise it will be parsed as a decimal.243 * @res: Where to write the result of the conversion on success.244 *245 * Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.246 * Used as a replacement for the obsolete simple_strtoull. Return code must247 * be checked.248 */249 int kstrtoint(const char *s, unsigned int base, int *res)250 {251 long long tmp;252 int rv;253254 rv = kstrtoll(s, base, &tmp);255 if (rv < 0)256 return rv;257 if (tmp != (long long)(int)tmp)258 return -ERANGE;259 *res = tmp;260 return 0;261 }262 EXPORT_SYMBOL(kstrtoint);294 int kstrtou8(const char *s, unsigned int base, u8 *res)295 {296 unsigned long long tmp;297 int rv;298299 rv = kstrtoull(s, base, &tmp);300 if (rv < 0)301 return rv;302 if (tmp != (unsigned long long)(u8)tmp)303 return -ERANGE;304 *res = tmp;305 return 0;306 }
s是输入字符串,base可以是10(10进制)或16(16进制),或者是0自动识别:
base 为10,则字符串转换成10进制数,使用kstrtoint函数;
base 为16,则字符串转换成16进制数,使用kstrtou8函数;
res为存放转换后的数值;
当没有错误时返回值是0。
具体使用demo:
static ssize_t gpio_led_store(struct device *dev, struct device_attribute *attr,const char *buf, size_t size)
{int val;int ret;ret = kstrtoint(buf, 10, &val); //输入一个字符然后转换成10进制整形数if (ret) {printk("%s: kstrtoint error return %d\n", __func__, ret);return -1;}if (val== 1) { //如果echo 1 到节点则调用printk("-czd-: _%s_ :gpio pull up\n", __func__);gpio_direction_output(gpio_led, val); //设置GPIO电平为高电平} else if (val == 0) { //如果echo 0 到节点则调用printk("-czd-: _%s_ :gpio pull down\n", __func__);gpio_direction_output(gpio_led, val); //设置GPIO电平为低电平} else {printk("I only support 0 or 1 to ctrl led\n");}return size;
}
Linux内核使用的字符串转整形数和16进制数相关推荐
- C语言输出字符,字符串的ASCII码的16进制数
C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...
- 在c语言中输出8进制数,16进制数
在初学c语言时,我们会碰到关于8进制,16进制转化的问题,在这里,提供一个简单的方法: 在c语言中,我们是可以直接将10进制数转换为8进制,16进制的. 如下图: 我们的输出结果为: 很轻松的就解决的 ...
- c语言8进制数与16进制数,C语言中的二进制数、八进制数和十六进制数
C语言中的整数除了可以使用十进制,还可以使用二进制.八进制和十六进制. 二进制数.八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式.但是,表示一个二进制.八 ...
- C语言/C++中怎么表示8进制数或者16进制数?(8进制数用数字0开头,16进制数用0x或者0X开头)
在C语言里,整数有三种表示形式:十进制,八进制,十六进制. 其中以数字0开头,由0到7组成的数是八进制. 以0X或0x(0x中是数字0,不是大写字母O)开头,由0-9,A-F或a~f 组成是十六进制. ...
- qt 中文转十六进制_QT中10进制数转换为16进制数的代码怎么写?
展开全部 //将十六进制"10"转换为e68a8462616964757a686964616f31333365633931十进制i: int i = Convert.ToInt32 ...
- linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...
嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include #incl ...
- 嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)
嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include<st ...
- 将字符串转为16进制数_C语言中的进制互转与数值和字符串互转的混搭玩法
点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 很多事根本就没有那么多的前提可言,想做事,就不要把先决条件看得过重. 文 章 导 读 今天给小伙伴们介绍下了下进制转换和字符串与数值互转的方法 ...
- byte数组转字符串_VS2012 C# 16进制数与字符串的互换
#编程基础##我要上头条# 一.字符串转换为16进制字节数组的步骤 1.将字符串按每两个字符拆分并插入逗号为分隔符: 2.将拆分后的字符串分离为字符串数组: 3.将字符串数组转换成字节数组并检测字符是 ...
- 面试题--位操作--将十进制数转换为16进制字符串输出
这是一道面试题: 编程实现将十进制数转换为16进制输出,不得使用任何已定义的库函数,比如string,math等. char * get16String(long num) { int i = 0; ...
最新文章
- 澳洲计算机学,2020年澳洲计算机科学专业工作好找吗
- 技术02期:这么做竟然能让你的hive运行得更流畅!
- 弹出popwindow 背景变暗
- 快速上手关键词抽取的算法
- 【Linux】一步一步学Linux——groups命令(93)
- python导出项目所依赖的所有的库文件以及安装
- 自定义控件android.r,Android控件架构与自定义控件
- iOS开发之--HTTP请求
- 08.ThreeJs开发指南-第八章-加载外部模型
- sql 去重 distinct
- 悟空云课堂|第四十七期:会话固定(CWE-384: Session Fixation)
- vue3 Component inside <Transition> renders non-element root node that cannot be animated.
- ps 证件照(1,2寸)
- mysql bytes sent_MySQL服务器状态变量(mysqld)
- Android 小数点前后字体大小不一致,EditText限制小数点前后位数的实例
- FFmpeg m3u8文件返回Invalid data found when processing input错误
- 面向对象(四)多态以及多态性,
- c语言程序由一个或多个函数,一个C源程序可由一个或多个函数组成。()
- 【verilog】多功能数字钟的设计
- Warning: This Python interpreter is in a conda environment, but the environment has not been activat
热门文章
- Jzoj4831 方程式
- SpringBoot+Ajax文件上传+FormData表单提交
- Adaboost\GBDT\GBRT\组合算法
- POJ 2054 Color a Tree#贪心(难,好题)
- C++ map的基本操作和使用
- 老外的一个用的SQLite的例子,看起来比较初级
- Ruby代码块、迭代子和过程对象
- 75道常见AI面试题,看看你的知识盲点在哪?(附解析,包括机器学习、深度学习、苹果Google面试等)...
- ICML2018对抗生成网络论文评述
- 模型部署翻车记:pytorch转onnx踩坑实录