我是靠谱客的博主 成就苗条,最近开发中收集的这篇文章主要介绍C语言 数字与字符/字符串的相互转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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语言 数字与字符/字符串的相互转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部