概述
C语言 数字与字符/字符串转换
数字转字符
ASCII码操作
只能将数字转为字符,方法为将要转换的数字直接加上数字0的ASCII码,如9转换为9 + ‘0’
数字转字符串
itoa函数
itoa函数不是C标准函数,glibc里面没有实现,但也可以了解下
函数原型:
char* itoa(int value,char*string,int radix);
value:要转换的数字
string:转换后的字符串
radix:表示打印的进制形式,范围2~36
sprintf函数
#include <stdio.h>
int sprintf(char *str, const char *format, ...);
用法与printf基本一致,只不过sprintf将输出放在str指向的字符数组中
可以通过
sprintf(str,"%d",value)
将value保存的数字转为字符串保存在str中,具体代码如下·
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int i = 0;
int val = 0;
char array[6] = "abcde";
val = sprintf(array, "%d3", 12);
for (i = 0; i < 6; i++)
{
printf("%c ", array[i]);
}
printf("n%dn", val);
return 0;
}
打印结果为:
1 2 3
e
3
可以看到vsprintf将数字12转为字符串后,与"%d3"中的3拼接后成了字符串"123",然后将该字符串保存在array中,同时返回写入的字符串的长度3,要强调的是vsprintf会自动添加空字符,以及返回值不包括空字符。
字符转数字
ASCII码操作
通过减去0的ASCII码,将字符转为数字,如’9’转为’9’ - ‘0’ = 9
字符/字符串转数字
strtol函数
函数原型如下:
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
base指定nptr指向的字符串中数值的进制,然后strtol按照这个进制的表示规则从第一个非空白字符取读取字符串,如果遇到非法字符则停止,例如,如果base为10,则字符串中的a-f就被认为是非法的,如果base为16,a-f就是有效的。
endptr用来返回nptr中指定进制数字后的第一个非有效字符,如:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
char *endptr = NULL;
long int val = 0;
char array[6] = "0xa1g";
val = strtol(array, &endptr, 16);
printf("array address:%pn", array);
printf("endptr address:%pn", endptr);
printf("val:%ldn", val);
return 0;
}
打印结果为
array address:0x7ffd7fd4a9e2如果
endptr address:0x7ffd7fd4a9e6
val:161
可以看到,"0xa1g"按照16进制转换,0 x a 1四个字符都是合法的,转换为十进制为161,字符g不是合法的,因此它的地址通过endptr返回
endptr可以设置为NULL
base的取值可以是2-36,也可以是0
base为0时,按照下面优先级处理
如果数字开头有0x或0X,则按照16进制读
如果数字开头是0,则按照8进制读
按照10进制读
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
char *endptr = NULL;
long int val = 0;
char array1[6] = "0x11";
char array2[6] = "011";
char array3[6] = "11";
val = strtol(array1, NULL, 0);
printf("0x11:%ldn", val);
val = strtol(array2, NULL, 0);
printf("011:%ldn", val);
val = strtol(array3, NULL, 0);
printf("11:%ldn", val);
return 0;
}
输出如下:
0x11:17
011:9
11:11
另有strroll,strtoul,strtoull,用法和strrol类似,其中strtoul同样会识别负号
atoi函数
glibc没有itoa函数,但却有atoi函数,原型如下:
#include <stdlib.h>
int atoi(const char *nptr);
nptr指向要转换的字符串
返回值为转换后的数字
atoi相当于strtol(nptr,NULL,10)
最后
以上就是成就苗条为你收集整理的C语言 数字与字符/字符串的相互转换的全部内容,希望文章能够帮你解决C语言 数字与字符/字符串的相互转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复