C语言ASCII码转汉字方法

说在前头:

  之前同学给我发了一个输出彩色心的代码,效果如下图。感觉很新奇,就研究了一下。这个心输出时每个字符之间有一毫秒的间隔,且中间有“我喜欢你!”的汉字。在运行至下图的效果之后,输入任意字符就会进入一个一直输出心的无限循环中,但是其颜色会与之前输出的不一样。
在这里插入图片描述
  在弄懂怎么样设置控制台字符颜色之后,我就对“我喜欢你”这几个汉字起了兴趣,代码中明明没有汉字,那这几个字又是怎么输出的呢?怀揣着这份好奇心我又仔细看了一遍代码,发现他是以字符的形式输出的整型数,这让我想到了ASCII码与字符之间的关系。于是我去询问度娘,遂得知了以下内容。

以下是干货:

先告诉你:两个特定的ASCII码,紧挨着按字符型(%c)输出就会组成一个汉字!
  1、对于ASCII码中的字符,一个字符占一个字节的空间。而一个中文汉字(包括中文标点)占两个字节的空间。
  2、对于ASCII码,33、-223、289表示的是同一个字符‘ !’,其实就是以256为一个循环。
  3、任意两个属于[128,256](由2可知一些数可以通过加或减256转化为该区间的数)的ASCII码都可以组成一个汉字,理论上所有的汉字都可以用ASCII码表示。

怼个代码先

#include<stdio.h>
int main()
{
    int a[]={196,227,186,195,194,240},i;//数组a[]中的六个数表示ASCII码值
    for(i=0;i<6;i++)                    //每两个ASCII码组成一个汉字
    {                                   //其中196和227组成'你'、186和195组成'好'、194和240组成'吗'
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}

输出结果为:你好吗
需要注意的是:组成一个汉字的两个ASCII码在输出的时候必须紧挨!其之间不能有任何字符。否则会造成乱码。

看了上面的代码相信你已经知道怎么把ASCII码转化成汉字了,但是,你如何知道你想要转化汉字的ASCII值呢?
下面的代码会告诉你

#include<stdio.h>
int main()
{
	char str[]="很简单";
	int i=0;
	while(str[i]!='\0')
	{
		printf("%d ",str[i]);
		i++;
	}
	printf("\n");
	return 0;
}

附上彩色心代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define U 0.1
#define V 0.053//U、V用于控制心的形状
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
    HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hCon,(ForeColor)|(BackGroundColor));
     // SetConsoleTextAttribute函数:是系统设置控制台背景色和前景色的函数 ,在头文件windows.h中  
     // Set Console TextAttribute 汉意:设置控制台的文本属性
     /*  
     原型为:
     BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes)
     */
     //hCon:是一个 HANDLE 类型的变量,句柄,某种结构的唯一标识(其值是一个整型数)
     //ForeColor:前景色(字符颜色);BackGroundColor:背景色,用十六进制数表示
}
int main()
{
    int i,s=0,t,a=10,b=11,c=12,d=13,e=14;
    int z[] = {32,32,206,210,207,178,187,182,196,227,33,32,32};//"  我喜欢你!  " 的 ASCII码
    float x,y,m;
    for(y=1.3; y>=-1.1; y-=U)
    {
        for(x=-2; x<1.4; x+=V)
        {
            if((((x*x+y*y-1)*(x*x+y*y-1)*(x*x+y*y-1)-x*x*y*y*y)<=0))//心形线的公式
            {
                if(y>=1.3-10*U||y<=1.3-11*U)
                {
                    s++;
                    if(s%4==1)
                    {
                        SetColor(a,0);
                        printf("l");
                    }
                    if(s%4==2)
                    {
                        SetColor(e,0);
                        printf("o");
                    }
                    if(s%4==3)
                    {
                        SetColor(c,0);
                        printf("v");
                    }
                    if(s%4==0)
                    {
                        SetColor(d,0);
                        printf("e");
                    }
                }
                else
                {
                    for(i = 0; i < 42; i++)
                    {
                        if(i<=14||i>=28)
                        {
                            s++;
                            if(s%4==1)
                            {
                                SetColor(a,0);
                                printf("l");
                            }
                            if(s%4==2)
                            {
                                SetColor(e,0);
                                printf("o");
                            }
                            if(s%4==3)
                            {
                                SetColor(c,0);
                                printf("v");
                            }
                            if(s%4==0)
                            {
                                SetColor(d,0);
                                printf("e");
                            }
                        }
                        else
                        {
                            SetColor(b,0);
                            printf("%c", z[i-15]);//输出"我喜欢你"
                            Sleep(50);            //延时函数,以毫秒为单位,包含在头文件windows.h中
                        }
                    }
                    break;
                }
            }
            else
                printf(" ");
            Sleep(1);
        }
        printf("\n");
    }
    printf("请按任意键继续!");
    getchar();
    while(1)
    {
        system("cls");//清屏操作
        t=a;
        a=b;
        b=c;
        c=d;
        d=e;
        e=t;
        for(y=1.3; y>=-1.1; y-=U)
        {
            for(x=-2; x<1.4; x+=V)
            {
                if((((x*x+y*y-1)*(x*x+y*y-1)*(x*x+y*y-1)-x*x*y*y*y)<=0))
                {
                    if(y>=1.3-10*U||y<=1.3-11*U)
                    {
                        s++;
                        if(s%4==1)
                        {
                            SetColor(a,0);
                            printf("l");
                        }
                        if(s%4==2)
                        {
                            SetColor(b,0);
                            printf("o");
                        }
                        if(s%4==3)
                        {
                            SetColor(c,0);
                            printf("v");
                        }
                        if(s%4==0)
                        {
                            SetColor(d,0);
                            printf("e");
                        }
                    }
                    else
                    {
                        for(i = 0; i < 42; i++)
                        {
                            if(i<=14||i>=28)
                            {
                                s++;
                                if(s%4==1)
                                {
                                    SetColor(a,0);
                                    printf("l");
                                }
                                if(s%4==2)
                                {
                                    SetColor(b,0);
                                    printf("o");
                                }
                                if(s%4==3)
                                {
                                    SetColor(c,0);
                                    printf("v");
                                }
                                if(s%4==0)
                                {
                                    SetColor(d,0);
                                    printf("e");
                                }
                            }
                            else
                            {
                                SetColor(e,0);
                                printf("%c", z[i-15]);
                            }
                        }
                        break;
                    }
                }
                else
                    printf(" ");
            }
            printf("\n");
        }
        Sleep(1000);
    }
 return 0;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值