关于扩展ASCII码

博客主页:我的主页
欢迎点赞 收藏 留言 欢迎讨论!
本文由 【泠青沼~】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!个人主页

ASCII码

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号而通常我们都会知道基础ASCII码,但对后面的扩展ASCII 码不太了解。
关于扩展ASCII码_第1张图片
这就是单个字符的取值范围0 ~ 255,每一个ASCII码值都代表一个单字符。
我们常常会在编程中出现一些令人苦恼的问题,让人百思不得其解,有如下程序:

#include
int main(void)
{
	int i = 5;
	float a = 242.15,b;
	double c = 123456789.456123;
	char d = 'B';
	unsigned char e;
	printf("i=%d,a=%f,c=%lf,d=%c,d=%d\n",i,a,c,d,d);
	b = i;
	i = a;
	a = c;
	d = i;
	e = d;
	printf("i=%d,a=%f,b=%f,d=%c,d=%d,e=%c,e=%d",i,a,b,d,d,e,e);
	return 0;

}

最后输出的结果却不尽如人意:

关于扩展ASCII码_第2张图片
其中d=?,e=?确实有点问题,为什么这里会输出’ ?’,在ASCII码中似乎并没有242这个码值,这时候我们就需要去看扩展ASCII码,发现242对应的字符是“<=”,如何才能输出呢,怎么解决这个问题。

解决方法

我们C语言中char类型的变量默认的是有符号类型(范围-128 ~ 127),如果我们想要去显示出来128 ~ 255的字符,我们就需要将控制台的编码格式改变,比如改成美国的一种编码标准:437(OEM-美国),就可以正常显示128 ~ 255编码的字符,总之按照不同的标准来输出的字符结果是不一样的,所以我们需要通过两条语句来修改编码标准:

#include
SetConsoleOutputCP(437);

我们最后输出其结果:
关于扩展ASCII码_第3张图片
至此,我们就可以解决这个问题。

你可能感兴趣的:(笔记,c语言)