转自 http://blog.csdn.net/tommy_wxie/article/details/7480087
Linux内核中提供的一些字符串转换函数:
lib/vsprintf.c
-
1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
-
2. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
-
3. long simple_strtol(const char *cp, char **endp, unsigned int base)
-
4. long long simple_strtoll(const char *cp, char **endp, unsigned int base)
-
5. int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
-
6. int strict_strtol(const char *cp, unsigned int base, long *res)
-
7. int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
-
8. int strict_strtoll(const char *cp, unsigned int base, long long *res)
-
9. int sprintf(char *buf, const char *fmt, ...)
-
10. int snprintf(char *buf, size_t size, const char *fmt, ...)
-
11. int sscanf(const char *buf, const char *fmt, ...)
1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
2. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
3. long simple_strtol(const char *cp, char **endp, unsigned int base)
4. long long simple_strtoll(const char *cp, char **endp, unsigned int base)
5. int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
6. int strict_strtol(const char *cp, unsigned int base, long *res)
7. int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
8. int strict_strtoll(const char *cp, unsigned int base, long long *res)
9. int sprintf(char *buf, const char *fmt, ...)
10. int snprintf(char *buf, size_t size, const char *fmt, ...)
11. int sscanf(const char *buf, const char *fmt, ...)
unsigned long
long simple_strtoull(const char *cp, char **endp, unsigned int
base)
功能:将一个字符串转换成unsigend long long型数据。
返回:返回转换后数据。
参数:cp指向字符串的开始,endp指向分析的字符串末尾的位置,base为要用的基数(进制数),base为0表示通过cp来自动判断基数,函数自动可识别的基数:‘0x’表示16进制,‘0’表示8进制,其它都认定为10进制。函数可转换成数字的有效字符为:[0,f]。举例:cp
= “0x12str”,base = 0,则返回unsigned long long为18,*endp = “str”。 参数下同。
我的使用:
在做nand 的测试程序中遇到需要传递参数的问题,但是一般argv传递的都是ascii码,本来我调用时传的是nand test 1 2,其中1代表mode1模式,2代表测试次数,但是我打印出argv[2],arcv[3]的值分别是49 50,这明明是ascii码,本来想直接给参数减48然后来用的,后来发现了这么个强大的函数,调用如下:
int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
simple_strtoul(argv[2], NULL, 0),这样就可以把argv转换成十进制了,在别处还看到了16进制的调用:start = (ulong *)simple_strtoul(argv[1], NULL, 16);
-
static ssize_t led_brightness_store(struct device *dev,
-
struct device_attribute *attr, const char *buf, size_t size)
-
{
-
struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
ssize_t ret = -EINVAL;
-
char *after;
-
unsigned long state = simple_strtoul(buf, &after, 10);
-
size_t count = after - buf;
-
-
if (isspace(*after))
-
count++;
-
-
if (count == size) {
-
ret = count;
-
-
if (state == LED_OFF)
-
led_trigger_remove(led_cdev);
-
led_set_brightness(led_cdev, state);
-
}
-
-
return ret;
-
}
static ssize_t led_brightness_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t size)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
ssize_t ret = -EINVAL;
char *after;
unsigned long state = simple_strtoul(buf, &after, 10);
size_t count = after - buf;
if (isspace(*after))
count++;
if (count == size) {
ret = count;
if (state == LED_OFF)
led_trigger_remove(led_cdev);
led_set_brightness(led_cdev, state);
}
return ret;
}
unsigned long simple_strtoul(const char *cp, char **endp, unsigned int
base)
功能:将一个字符串转换成unsigend long型数据。
返回:返回转换后数据。
int
strict_strtoul(const char *cp, unsigned int base, unsigned long
*res)
功能:将一个字符串转换成unsigend long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned
long数据。
说明:该函数对cp指向的字符串严格要求,cp指向的字符串必须为真正的unsigned
long形式的字符串。字符串必须以“0x”、“0”、[0,f]开始,中间全部为有效的字符[0,f],否则返回为负。它会处理字符串最后的“\n”字符。下同
long long simple_strtoll(const char *cp, char **endp, unsigned int
base)
功能:将一个字符串转换成sigend long long型。
返回:返回转换后数据。
int
strict_strtol(const char *cp, unsigned int base, long *res)
功能:将一个字符串转换sigend
long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed long数据。
int
strict_strtoull(const char *cp, unsigned int base, unsigned long long
*res)
功能:将一个字符串转换unsigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的unsigned
long long数据。
int strict_strtoll(const char *cp, unsigned int base, long
long *res)
功能:将一个字符串转换sigend long long型。
返回:转换成功返回0,否则返回负。res指向转换后的signed
long long数据。
int sprintf(char *buf, const char *fmt,
...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。
返回:返回写入buf字符串的字符个数。
int
snprintf(char *buf, size_t size, const char *fmt,
...)
功能:格式化输出字符串,类似于printf,只是用字符串buf作为输出对象。其中size为buf的大小(包括‘\0’字符)。
返回:返回写入buf字符串的字符个数。
int
sscanf(const char *buf, const char *fmt,
...)
功能:格式化输入字符串,类似于scanf,只是用字符串buf作为输入对象。
返回:返回读取buf字符串的字符个数。
lib/kasprintf
-
char *kasprintf(gfp_t gfp, const char *fmt, ...)
-
char *kasprintf(gfp_t gfp, const char *fmt, ...)
char *kasprintf(gfp_t gfp, const char *fmt, ...)
char
*kasprintf(gfp_t gfp, const char *fmt,
...)
功能:格式化输出字符串到一段且gfp分配的内存中。
返回:返回指向该内容的字符串指针。