【转】相关函数: atof, atoi, atol, strtod, strtoul

来源:互联网 发布:php 图片上传 编辑:程序博客网 时间:2024/06/03 10:41

转自:http://zjf30366.blog.163.com/blog/static/41116458200810694548211/

非本人原创文章,若要引用,必须写出转载的地址,这是一种素质!

这也是对他人成果的尊重!

  strtod()           //字符串转为   double  
  strtof()           //字符串转为   float  
  strtols()         //字符串转为   long   double  
  strtol()           //字符串转为   long  
  strtoll()         //字符串转为   long   long  
  strtoul()         //字符串转为   unsigned   long  
  strtoull()       //字符串转为   unsigned   long   long  

 

strtol() -- 将字符串转换成长整型数

相关函数: atof, atoi, atol, strtod, strtoul
表头文件: #include <stdlib.h>
定义函数: long int strtol(const char *nptr, char **endptr, int base)
函数说明: strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制(字符串以10进制表示),若base值为16则采用16进制(字符串以16进制表示)。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值:   返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明: ERANGE指定的转换字符串超出合法范围。


将字符串a, b, c 分别采用10, 2, 16进制转换成数字
------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
main()
{
    char a[] = "100";
    char b[] = "100";
    char c[] = "ffff";
    printf("a = %d\n", strtol(a, NULL, 10)); //100
    printf("b = %d\n", strtol(b, NULL, 2));   //4
    printf("c = %d\n", strtol(c, NULL, 16)); //65535
}

"100" ---> 100 (Dec) ---> 100 (Dec)
"100" ---> 100 (BIN) ---> 4   (Dec)
"ffff"---> ffff(Hex) ---> 65535(Dec)



字符串b中的每个字符在内存中都占有一个字节(1 Byte = 8 bits)的空间,将若干个(3个)字节中的内容转换成二进制的数字(字符串"100"去掉双引号后是一个二进制的数字100),让后将该二进制数字以十进制的形式4打印出来

来自MSDN的例子:

  #include <stdlib.h>

  #include <stdio.h>

  void main( void )

  {

  char *string, *stopstring;

  double x;

  long l;

  int base;

  unsigned long ul;

  string = "3.1415926This stopped it";

  x = strtod( string, &stopstring );

  printf( "string = %s\n", string );

  printf(" strtod = %f\n", x );

  printf(" Stopped scan at: %s\n\n", stopstring );

  string = "-10110134932This stopped it";

  l = strtol( string, &stopstring, 10 );

  printf( "string = %s", string );

  printf(" strtol = %ld", l );

  printf(" Stopped scan at: %s", stopstring );

  string = "10110134932";

  printf( "string = %s\n", string );

  /* Convert string using base 2, 4, and 8: */

  for( base = 2; base <= 8; base *= 2 )

  {

  /* Convert the string: */

  ul = strtoul( string, &stopstring, base );

  printf( " strtol = %ld (base %d)\n", ul, base );

  printf( " Stopped scan at: %s\n", stopstring );

  }

  }


atoi() -- 将字符串转换成整型数

atoi, atol, atoll, atoq -- convert a string to aninteger
相关函数: atof, atol, atrtod, strtol, strtoul
表头文件: #include <stdlib.h>
定义函数: int atoi(const char *nptr);
函数说明: atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字字符串结束时('\0‘)才结束转换,并将结果返回。
返回值:   返回转换后的整型数。
附加说明: atoi(nptr)与strtol(nptr, (char**)NULL, 10)结果相同


#include <stdlib.h>
#include <stdio.h>
int main() {
    char     *a = "-100";
    char     *b = "456";
    int     c;
    c = atoi(a) + atoi(b); //356
    printf("c = %d\n", c);
}

 

strtod(将字符串转换成浮点数)

  相关函数

          atoi,atol,strtod,strtol,strtoul

  表头文件

          #include<stdlib.h>

  定义函数

          double strtod(const char *nptr,char **endptr);

  函数说明

          strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。

  返回值

          返回转换后的浮点型数。

  附加说明

          参考atof()。

  范例

          /*将字符串a,b,c 分别采用10,2,16 进制转换成数字*/

  #include<stdlib.h>

  mian()

  {

  char a[]=”1000000000”;

  char b[]=”1000000000”;

  char c[]=”ffff”;

  printf(“a=%d\n”,strtod(a,NULL,10));

  printf(“b=%d\n”,strtod(b,NULL,2));

  printf(“c=%d\n”,strtod(c,NULL,16));

  }

  执行

          a=1000000000

  b=512

  c=65535

 

 

 

转自:http://zjf30366.blog.163.com/blog/static/41116458200810694548211/

原创粉丝点击