我想从字符串中提取整数,例如我想从字符串“/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);