字符串转换函数

.C语言库函数为我们提供了以下转换函数,使用<stdlib.h>头文件

.最简单的函数atoi和atol,执行基数为10的转换。基数转换也就是使用的进制,基数为10则执行10进制转换。

int atoi(char const *string);
long int atol(char const *string);
  • string是要转换为整形的字符串

该函数返回转换后的整数和长整数值,如果没有执行有效的转换,则返回零。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int value;
   char str[20];
   
   strcpy(str, "1234567");
   value = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, value);

   strcpy(str, "csdn.net");
   value = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, value);

   return 0;
}

编译运行产生以下结果

字符串值 = 1234567, 整型值 = 1234567
字符串值 = csdn.net, 整型值 = 0                                       

.strtol和atol同样把参数字符串转换为long。但是,strtol保存一个指向转换值后面第1个字符的指针。如果函数的第2个参数并非NULL,这个指针便保存在第2个参数所指向的位置。这个指针允许字符串的剩余部分进行处理而无需推测转换在字符串的哪个位置终止。strtoul和strtol的执行方式相同,但它产生一个无符号长整数。

long int strtol( char const *string, char **unused, int base);
unsigned long int strtoul(char const *string,char** unused,int base);
  • string -- 要转换为长整数的字符串。

  • unused -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。

  • base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换。

该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char string[30] = "20230205 This is test";
   char *unused;
   long ret;

   ret = strtol(string, &unused, 0);
   printf("数字是 %ld\n", ret);
   printf("字符串部分是 |%s|", unused);

   return(0);
}

编译运行产生以下结果

数字是 20230205
字符串部分是 | This is test|

四.atof和strtod函数和整型字符串转换函数类似,只不过它们返回浮点值

double atof(char const *string);
double strtod(char const *string,char** unused);

如果这两个函数的字符串参数并不包含任何合法的数值字符,函数就返回零。

如果转换值太大或太小,无法用double表示,那么函数就在errno中存储ERANGE这个值,如果值太大(无论是正数还是负数),函数返回HUGE_VAL。如果值太小,函数返回零。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值