C语言中int和char之间的转化问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中int和char之间的转化问题相关的知识,希望对你有一定的参考价值。

int型的0到99之间的数,比如:32、6等,如何转化成char型的字符串,比如:字符串32和6等?
着急,在线等,万分感谢!
我使用的是C52语言,没有sprintf函数,不能使用sprintf函数,希望得到一个字符串组

c语言是一种弱类型语言,如果使用熟练了你就会知道,类型什么的都是浮云,内存才是王道,考虑问题的时候要深入本质才行,关于这个问题从内存来看,如下:
1.
char是字符型,内存中占用
1
个字节,取值范围是-128到127,int类型占用
4
个字节,范围就不说了,肯定是比char要大的多,这两个都是有符号数。
2.
char和int一般情况下是可以直接做加减运算的,你可以直接把char当成一个int,只不过取值范围小点;
3.
不同类型的数值在做运算时,以尽量不丢失有效数据为原则,比如char和int相加,系统会自动把char转换成int,最终结果也是int型;
4.
赋值时如果类型不一样,要小心,若等号左边的类型小于右边的,会产生截断赋值(特别注意),大于的话就没问题,不会丢失有效数据。
5.
如你写的第一句,a-b是int,c是char,比较时会先把char转换成int,也就是从1个字节变成4个字节,肯定不会丢失有效数据,没问题;
6.
第二句,a+b是int,要赋值给char型c,相当于把4个字节的信息装到1个字节的内存中,这肯定放不下,因此会产生截断赋值,取a+b结果的最后一个字节赋值,前面三个字节则会丢掉,
所以这些写会有风险(当然编译肯定是过的,只是警告罢了),这种情况下,如果a+b结果没超过char取值范围,也问题,因为不会丢失有效数据,如果超过了的话,结果就不是它应该有的结果了,这是就要小心了,所以一般别这么写,除非你确定数据不会越界,一旦越界就会截断赋值(只是结果不对,但程序也不会崩溃的)。
参考技术A 其实不用转!只要在赋值的时候在数字那里加单引号就行了!就像这样:
int main(void)

char a;
a='1';//字符1
printf("%c\n",a);
参考技术B 首先查表0~9的asc2码连在一起的,所以你只需要最小值(30)+数值本身就可以了,不用逐个做
比如0:30,8:30+8
然后因为你不仅仅是个位所以做循环
while(x!=0)

a=x%10;
x=x/10;
char c=30+a;

大概思路就是这样
我不用c很久了可能有些错误
参考技术C 查表啊 就像led数码管显示那样。
char code zhifu【】=0~99对应字符表示;
int a=数;
char c;
c=zhifu【】;
参考技术D sprintf(buffer, "%d", your_int); // char buffer[1024];追问

我用的是单片机C52语言,没有sprintf函数,而且我也不是为了显示他,而是实实在在的改变并输出一个变量

追答

char(your_int)...........

追问

请问这样可以吗?
int a=67;
char b[];
b[]=char(a);
然后得到的b[]是字符串组67吗?

追答

int i;
char b[1024];
for (i = 0; a; i++)
----b[i] = a % 10 + '0';
----a /= 10;

b[i+1] = 0;
int l = 0, r = strlen(b) - 1;
while (l <= r)
----swap(b[l++], b[r--]);


// 有点C++风格了,反正差不多就这意思。。。。。

C语言 int转char

怎么把int类型的168转换为char * 字符串类型的 168

1、可以转换,强制转换就行。例如:
int a=100;
unsigned char * c = (unsigned char *)a;
2、强制类型转换
当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
显式强制类型转换
显式强制类型转换需要使用强制类型转换运算符,格式如下:
type(<expression>)

(type)<expression>
其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变。
参考技术A %10得到个位,/10去掉个位,再%10得到十位,再/10直到结果为0。就把每一位都取出来了,然后直接对对应位都加上48也就是'0'char型的0,就可以赋值给char了。 参考技术B 孤傲。
12-07
10:15:08□:
09:52:54那是因为一个整数占4个字节,一个char只占一个字节,当int转char时,会选择int的低四位来付给char,而现在257在内存中为10000000
00000000
00000001
00000001把最后的00000001付给了char所以就是1了啊
参考技术C

    #include "stdio.h"
    #include "stdlib.h"
    void main()

    int a=168;
    char s[100];
    itoa(a,s,10);  把a转到s中,10是十进制
    puts(s);

参考技术D #include "stdio.h"
#include "stdlib.h"
void main()

int a=168;
char s[100];
itoa(a,s,10); 把a转到s中,10是十进制
puts(s);

以上是关于C语言中int和char之间的转化问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 怎样把一个int转换成char

c语言强制int转化为char命令是啥?

C语言int型转char型并相接

double和char之间怎样转换?谢谢!

C++ 中有没有 LONG转化STRING STRING 转化LONG 的库函数

c语言中如何将 int转化为string 类型