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)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>