有时候需要把字符串转化为整型,在C语言中最简单的方法就是直接调用库函数,头文件#include<stldlib.h>
类似的函数有:atoi();把字符串转化为整形
atol();把字符串转化为长整形
atof();把字符串转化为双精度浮点型
strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
但是我不知道大家有没有考虑过atoi的源码,小弟不才自己编写了一个源码,望大家批评。
int con(char *str)
{
char b;
int i,j;
int *arr_int;
char *str1 = str;
long int rt =0;
int num=0;
b = *str;
while (b != '\0')
{
num++;
str = str + 1;
b = *str;
}
arr_int = (int *)malloc(num*sizeof(int));
for (i = 0; i < num; i++)
{
arr_int[i] = str1[i]-48;//把字符串中的字符化为整形保存在整形数组中
for (j = 0; j < num - i-1; j++)
{
arr_int[i]=arr_int[i] * 10;
}
rt = rt + arr_int[i];
}
free(arr_int);
return rt;
}
好久没有写博客了,后来遇见华为的笔试题,要求吧16进制的字符串转换为10进制的整数,比如输入0xa,打印出10.可以直接调用strtoll把字符串的十六进制数转换为整数,然后输出就可以了.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(void)
{
char a[10];
scanf("%s",a);
long int sum;
int length = strlen(a);
char *stop;
sum = strtoll(a,&stop,16);
printf("%ld\n",sum);
printf("0x%0x\n",sum);
#if 0
int length = strlen(a);
int i = 0;
for(i = 0;i < length;i++)
{
sum += (a[i] > '9'?(a[i]-'a'+10):(a[i] - '0'))*pow(16,length-1-i);
}
printf("%u\n",sum);
#endif
return 0;
}