• 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数,则使用科学计数法 && 四舍五入.

      

  • 相关阅读:
    查看日志
    MySQL连接方式和启动方式
    day03--MySQL用户篇
    MySQL5.6与5.7区别
    Ansible部署主从复制
    day03--MySQL多实例及多实例主从
    MySQL体系结构
    day02-mysql编译安装误删除用户恢复
    数据库包获取方式
    day01--数据库介绍及二进制安装MySQL5.6
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3512315.html
Copyright © 2020-2023  润新知