我想从字符串中提取整数,例如我想从字符串“/dev/nkdev/group0/mdev1”中提取 0 作为组标识符和 1 作为 mdev 标识符。

上面的字符串“/dev/nkdev/group”在输入中是一个固定的模式,group id可以是0-9之间的任意整数,“mdev”也不固定,可以是任意字符序列后跟一个整数。

我使用了下面的代码

#define NO_INTEGER "%0[^0-9]" 
 
res = sscanf(dev_name_p, NO_INTEGER "%u" NO_INTEGER "%u", 
             &group_id, &mdev_id); 

但我发现内核不支持跳过序列。任何人都可以告诉,是否有任何内核库函数可以完成这项工作?

请您参考如下方法:

kstrtoint() — 将字符串转换为 int。

kstrtol() — 将字符串转换为长整型。

您检查 linux 内核源代码树 /include/linux/kernel.h 中的声明。您必须包含此头文件 #include< linux/kernel.h> 在使用此功能之前。

 Example : 
 
    const char *buf = "123"; 
    long value; 
    if(kstrtoint(buf, 10, &value) != 0) 
         return -1; 
     printk("%d",value); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!