1)atof()
double atof(const char *str)把参数str指向的字符串转换为一个浮点数(类型double)
/* 函数声明 */
double atof(const char *str)
参数:
- str:要转换为浮点数的字符串。
返回值:函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回0.0。
实例:演示了atof()函数的用法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
float val;
char str[21];
if (argc != 2){
printf("Usage: %s <string_to_float>\n", argv[0]);
exit(1);
}
if (strlen(argv[1]) >= 20){
printf("string_to_float string is too long\n");
exit(1);
}
strcpy(str, argv[1]);
val = atof(str);
printf("string = %s, float value: %f\n", str, val);
return 0;
}
编译以上代码,在命令行中测试:
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atof 12.34
string = 12.34, float value: 12.340000
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atof 12.34abc
string = 12.34abc, float value: 12.340000
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atof abc12.34
string = abc12.34, float value: 0.000000
2) atoi()
int atoi(const char * str)把参数str指向的字符串转换为一个整数(类型int)。
/* 函数声明 */
int atoi(const char *str);
参数:
- str:要转换为整数的字符串。
返回值:改函数返回转换后的整数,如果没有执行有效的转换,则返回0。
实例:演示了atof()函数的用法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
int val;
char str[21];
printf("size of int is %ld\n", sizeof(int));
if (argc != 2){
printf("Usage: %s <string_to_int>\n", argv[0]);
exit(1);
}
if (strlen(argv[1]) >= 20){
printf("string_to_int string is too long\n");
exit(1);
}
strcpy(str, argv[1]);
val = atoi(str);
printf("string = %s, int value: %d\n", str, val);
return 0;
}
编译以上代码并在命令行中测试:
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atoi 123
size of int is 4
string = 123, int value: 123
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atoi 123xxx
size of int is 4
string = 123xxx, int value: 123
orangepi@orangepi4-lts:~/host_program/host/hostApp/O.linux-aarch64$ ./test_atoi xxx123
size of int is 4
string = xxx123, int value: 0
3)atol()
long int atol(const char * str)把参数str指向的字符串转换为一个长整数(类型为long int型)。
/* 函数声明 */
long int atol(const char * str);
参数:
- str:要转换为长整数的字符串。
返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回0。
实例:显示了atol()函数的用法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
long int val;
char str[21];
printf("size of int is %ld\n", sizeof(int long));
if (argc != 2){
printf("Usage: %s <string_to_int>\n", argv[0]);
exit(1);
}
if (strlen(argv[1]) >= 20){
printf("string_to_int string is too long\n");
exit(1);
}
strcpy(str, argv[1]);
val = atol(str);
printf("string = %s, int value: %ld\n", str, val);
return 0;
}
编译以上源代码并且在命令行中测试:
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_atol 1234567891256789
size of int is 8
string = 1234567891256789, int value: 1234567891256789
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_atol 1234567891256789xx
size of int is 8
string = 1234567891256789xx, int value: 1234567891256789
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_atol xx1234567891256789
size of int is 8
string = xx1234567891256789, int value: 0
4)strtod()
double strtod(const char * str, char ** endptr)把参数str所指向的字符串转换为一个浮点数(类型double型)。如果endptr不为空,则指向转换中最后一个字符后的指针会存储在endptr引用中。
/* 函数声明 */
double strtod(const char *str, char **endptr);
参数:
- str:要转换为双精度浮点的字符串。
- endptr:其值由函数设置为str中数值后下一个字符。
返回值:该函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
实例:演示strtod()函数的用法。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
char str[51] = " 20.3000 10.3 20.5 ";
char * ptr1, * ptr2;
double ret;
ptr2 = str;
while (* ptr2 != '\0'){
while (* ptr2 == ' '){
ptr2++;
if (* ptr2 == '\0'){
goto EXIT;
}
}
printf("before strtod: %s\n", ptr2);
ptr1 = ptr2;
ret = strtod(ptr1, &ptr2);
printf("double value: %lf\n", ret);
printf("after strtod: %s\n\n", ptr2);
}
EXIT:
return 0;
}
编译并且运行以上程序:
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_strtod
before strtod: 20.3000 10.3 20.5
double value: 20.300000
after strtod: 10.3 20.5
before strtod: 10.3 20.5
double value: 10.300000
after strtod: 20.5
before strtod: 20.5
double value: 20.500000
after strtod:
5) strtol()
long int strtol(const char * str, cahr ** endptr, int base)把参数str所指向的字符串根据给定的base转换为一个长整数(类型long int型),base必须介于2和36(包含)之间,或者是特殊值0。
long int strtol(const char *str, char **endptr, int base);
- str:要转换为长整数的字符串。
- endptr:对类型为char *的对象的引用,其值由函数设置为str中数值后的下一个字符。
- base:基数,必须介于2和26(包含),或者是特殊值0。如果base是0,则会根据字符串的前缀来做判断;如果字符串以0x或者0X开头,则将其视为16进制,如果字符串以0开头,则间视其为八进制;否则将使其为十进制。
返回值:返回被转换的长整型整数值。如果输入字符串不符合数字格式,strtol()将返回0。如果转换结果超出了long整数的表示范围,那个将产生溢出,并且设置errno为ERANGE。你可以使用<errno.h>文件头中的errno变量来检查是否有溢出发生。
实例:演示了strtol()函数的用法。
orangepi@orangepi4-lts:~/host_program/host/hostApp$ cat test_strtol.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
char str[] = "p-12p2345p578p9";
char * startptr, * endptr;
long int num;
int i, c;
endptr = str;
i = 0;
while (* endptr != '\0'){
while (!isdigit(c =* endptr) && c != '-'){
endptr++;
if (* endptr == '\0'){
goto EXIT;
}
}
startptr = endptr;
num = strtol(startptr, &endptr, 10);
printf("%d: %ld\n", ++i, num);
}
EXIT:
return 0;
}
编译以上代码并且运行:
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_strtol
1: -12
2: 2345
3: 578
4: 9
6)strtoul()
unsigned long int strtoul(const char * str, char ** endptr, int base)把参数str指向的字符串根据给定的base转为一个服务号长整数(类型为unsigned long int 型),base必须介于2和36(包含)之间,或者是特殊的0。
nsigned long int strtoul(const char *str, char **endptr, int base);
- str:要转换为长整数的字符串。
- endptr:对类型为char *的对象的引用,其值由函数设置为str中数值后的下一个字符。
- base:基数,必须介于2和26(包含),或者是特殊值0。如果base是0,则会根据字符串的前缀来做判断;如果字符串以0x或者0X开头,则将其视为16进制,如果字符串以0开头,则间视其为八进制;否则将使其为十进制。
返回值:返回被转换的长整型整数值。如果没有执行有效的转换,则返回一个零值。
实例:展示strtoul()的用法。
orangepi@orangepi4-lts:~/host_program/host/hostApp$ cat test_strtoul.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char ** argv)
{
char str[] = "pp12ppppppp2345pp578ppp9p";
char * startptr, * endptr;
long int num;
int i;
endptr = str;
i = 0;
while (* endptr != '\0'){
while (!isdigit(* endptr)){
endptr++;
if (* endptr == '\0'){
goto EXIT;
}
}
startptr = endptr;
num = strtoul(startptr, &endptr, 10);
printf("%d: %ld\n", ++i, num);
}
EXIT:
return 0;
}
编译并且运行以上代码:
orangepi@orangepi4-lts:~/host_program/host/hostApp$ O.linux-aarch64/test_strtoul
1: 12
2: 2345
3: 578
4: 9