atoi atol strtod strtol strtoul _gcvt

如果以下函数,您在使用的时候,总是输出一个莫名的值,是因为您忘记了引用头文件

#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
", 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
", 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(constchar*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
", strtod(a,&str) );
 8     printf( "str = %s
", str );
 9     printf( "b = %lf
", atof(b));
10     printf( "b = %lf
", strtod(b,&str) );
11     printf( "str = %s
", str );
12     printf( "c = %lf
", 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
", a );
 9     printf("strtod = %f
", x );
10     printf("Stopped scan at: %s

", str );
11     
12     x = strtol(a, &str, 16);
13     printf("a = %s
", a );
14     printf("strtol = %f
", x );
15     printf("base = %d
", 16 );
16     printf("Stopped scan at: %s

", 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); 
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("
string = %s
", str);
10     
11     /* a regular number */
12     num = 9.876;
13     _gcvt(num, sig, str);
14     printf("string = %s
", str);
15     /* a negative number */
16     num = -123.4567;
17     _gcvt(num, sig, str);
18     printf("string = %s
", str);
19     /* scientific notation */
20     num = 0.678e5;
21     _gcvt(num, sig, str);
22     printf("string = %s
", str);
23 }

如果需要转换的值超过ndigit数,则使用科学计数法 && 四舍五入.

  

原文地址:https://www.cnblogs.com/galoishelley/p/3512315.html