C语言,主要有两种方法可以将字符串转为整数:atoi() 和 strtol()。
1,atoi()
Syntax:
int atoi(const char *str);
包含的头文件是:stdlib.h
给定字符串的开头的空格会被忽略,从空格之后的字符开始转换,直到遇到第一个非数字的字符。
返回值就是转换后的结果。
例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
int value;
char str[20];
strcpy(str,"123");
value = atoi(str);
printf("String value = %s, Int value = %d\n", str, value);
return(0);
}
Output:
String value=123, Int value=123
如果转换失败,则返回0.
2,strtol()
Syntax:
long int strtol(const char *string, char **laststr,int basenumber);
包含的头文件是:stdlib.h
将一个字符串转换为长整型数。字符串开头的空格会忽略。当遇到第一个非数字字符时停止转换。
第一个参数是要转换的字符串,第二个是输出转换停止时的字符串位置,第三个是使用的进制,范围是2 ~ 36
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char str[10];
char *ptr;
long value;
strcpy(str, " 123");
value = strtol(str, &ptr, 10);
printf("decimal %ld\n", value);
return 0;
}
Output:
decimal 123
如果转换失败,则返回0.
如果是16进制,则使用字母A~F,表示10~15.
如果是17禁止,则使用字母A~G,表示10~16.
如果是16禁止,传入字符串“FFF”,“0xFFF” 和 “0XFFF”,结果是一样的。
而atoi相当于:(int) strtol(str, (char **)NULL, 10)。
3,一些其他方法
还有一些其他函数,比如 strtoumax, strtoimax, strtonum.
但这几个函数可能移植有问题,不是所有的C编译器都支持。
参考:
Convert a String to Integer in C | Delft Stack