如果以下函数,您在使用的时候,总是输出一个莫名的值,是因为您忘记了引用头文件
#include <stdlib.h>
1- atoi
int atoi(const char *nptr);
把字符串转换成整型数。ASCII to integer 的缩写。
#include <stdio.h> void funcAtoi(char *str) { float n; n = atoi(str); printf("str = %s, n = %f\n", str, n); } int main() { char *str1 = "1234.567"; char *str2 = "你好"; funcAtoi(str1); funcAtoi(str2); system("PAUSE"); return -1; }
2- atol
long atol(const char *nptr);
把字符串转换成长整型数
1 void funcAtol(char *str) 2 { 3 long n; 4 n = atol(str); 5 printf("str = %s, n = %ld\n", str, n); 6 } 7 8 int main() 9 { 10 char *str1 = "1234.567"; 11 char *str2 = "你好"; 12 funcAtol(str1); 13 funcAtol(str2); 14 system("PAUSE"); 15 return -1; 16 }
3- strtod
strtod(将字符串转换成浮点数)
头文件:
#include <stdlib.h>
函数原型:
double
strtod
(
const
char
*nptr,
char
**endptr);
nptr:传入需要转换的字符串
endptr:接收字符串中无法转换的内容 例如以下红色字体部分 str = "hello",
atof主要的区别是:
strtod可以把输入的"123.456hello"拆分2部分返回,函数返回123.456,参数endptr返回hello
atof只可以返回"123.456hello"的数字部分,返回为123.456000 返回也是double类型
可以利用strtod函数处理数字字母组合的字符串.
1 void funcStrtod() 2 { 3 char *str; 4 char *a = "12345.6789"; 5 char *b = "1234.567hello"; 6 char *c = "-123.23e4"; 7 printf( "a = %.2lf\n", strtod(a,&str) ); 8 printf( "str = %s\n", str ); 9 printf( "b = %lf\n", atof(b)); 10 printf( "b = %lf\n", strtod(b,&str) ); 11 printf( "str = %s\n", str ); 12 printf( "c = %lf\n", strtod(c,NULL) ); 13 }
4- strtol
long int strtol(const char *nptr,char **endptr,int base);
nptr是需要转换的字符串
endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。
base代表采用的进制方式 10, 0表示10进制 16, 0x表示16进制 8, 0开始不是0x表示8进制
主要特点: 可以读取2,4,8,16指定进制的数据.
1 void funcStrtol() 2 { 3 char *str; 4 double x; 5 char *a = "0xf1hello world"; 6 7 x = strtod( a, &str ); 8 printf("a = %s\n", a ); 9 printf("strtod = %f\n", x ); 10 printf("Stopped scan at: %s\n\n", str ); 11 12 x = strtol(a, &str, 16); 13 printf("a = %s\n", a ); 14 printf("strtol = %f\n", x ); 15 printf("base = %d\n", 16 ); 16 printf("Stopped scan at: %s\n\n", str ); 17 }
返回值十进制 241 整好是十六进制0xf1
5- strtoul
#include<stdlib.h>
unsigned long strtoul(const char *nptr,char **endptr,int base);
将字符串转换成无符号长整型数
例子:将十六进制 0xFF,转换成 10进制,得到 255
1 void funcStrtoul() 2 { 3 char *a = "0xFF"; 4 long n; 5 n = strtoul(a, NULL, 16); 6 printf("%d\n", n); 7 }
6- _gcvt
gcvt是把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数。
char *gcvt(double value, int ndigit, char *buf);
1 void func() 2 { 3 char str[25]; 4 double num; 5 int sig = 5; /* significant digits */ 6 7 num = 123456.02; 8 _gcvt(num, sig, str); 9 printf("\nstring = %s\n", str); 10 11 /* a regular number */ 12 num = 9.876; 13 _gcvt(num, sig, str); 14 printf("string = %s\n", str); 15 /* a negative number */ 16 num = -123.4567; 17 _gcvt(num, sig, str); 18 printf("string = %s\n", str); 19 /* scientific notation */ 20 num = 0.678e5; 21 _gcvt(num, sig, str); 22 printf("string = %s\n", str); 23 }
如果需要转换的值超过ndigit数,则使用科学计数法 && 四舍五入.