2009-11-08 440 views
3

在ASCII中,我想知道65是如何转换成'A'字符的? 据我所知,65可以用二进制表示,但'A'不是。那么这种转换怎么会发生呢?65怎么翻译成'A'字?

+0

你会问,为什么“A”的ASCII值为65? – Naveen 2009-11-08 17:58:35

回答

6

这只是一个'定义'。 ASCII定义了整数值和字符之间的关系。为了实现,有一个表(你不能看到它)做这个翻译。

编辑: 电脑只是0/1。字符流只是一堆0/1流:0110010101 ...有一个合同人与计算机之间:8位表示为一个字符(好吧,有Unicode,UTF-8等)。而'A'是65等等。

在C/C++和任何其他语言中,字符串只是像整数数组一样处理。只有当你需要显示字符串时,这些数字才会被翻译成字符。这种转换是通过硬件或软件实现:

  • 如果你写了绘制字符的功能,您要负责绘制“A”当输入为65
  • 过去,说我们'在DOS中,计算机在数字65上绘制'A'。这种关系通常存储在内存中。 (当时没有图形,只有文本,可以调整这张表来扩展字符,我记得诺顿DOS实用程序如NDD/NCD改变了这个表格来绘制一些不是普通ASCII码的特殊字符。)

您可能会在任何地方看到这种合约或定义。例如,汇编代码。你的程序最终会被翻译成机器码:这也只是一堆0和1.但是,当只显示0和1时,很难理解。所以,有一条规则:说101010的意思是“加”,1100的意思是“mov”。这就是为什么我们可以像“添加eax,1”一样编程,并且它最终将被解码为0/1。

+0

该定义表是用硬件还是软件实现的? (例如:c语言) – root 2009-11-08 18:09:27

+0

它被称为“字符编码”。维基:http://en.wikipedia.org/wiki/Character_encoding – BalusC 2009-11-08 18:12:59

+2

在实践中,用数字曲线定义槽号65中'A'字形轮廓的字体。 – 2009-11-08 18:15:18

1

计算机中的所有内容均以数字形式存储。这就是软件解释这些重要的数字。

ASCII是将数字65映射到字母'A'的标准。他们可以选择66或14代表'A',但他们没有。这几乎是任意的。

因此,如果您的号码65坐在计算机内存的某个地方,那么将这段内存视为ASCII的代码将将65映射到'A'。另一段将该内存视为完全不同格式的代码可能会将其完全转化为其他内容。

6

'A'IS 65.它只是让您的显示设备知道,当它将该值呈现为字符时,它应该将值65显示为A.

+0

我认为这个问题很混乱,因为它不完全确定要问什么,但是*我的下注*是这个答案指出它。 – 2009-11-08 17:59:57

+0

什么是字符串?一堆可怜的数字!但足够多的话,让我们穿过那堆,查找每个数字的字符,并写下他们! – Kawa 2009-11-08 18:04:07

3

ASCII表只是一个商定的值和字符映射。

当电脑被指示写一个数字代表的字符到屏幕上时,它只是找到数字相应的图像。图像对电脑没有任何意义,它可能是一个看起来像'A'或雪人的图像。

0

它基于60年代发明的查找表。

11

计算机中的所有东西都是二进制的。所以C中的字符串是一个二进制值的序列。很明显,这对人类没有多大用处,因此制定了各种标准,人们决定用什么数值表示某些字母。在ASCII中,值65代表字母A.因此,存储的值是65,但是每个人都知道(因为他们已经读取了ASCII规范)该值对应于字母A.

例如,如果我正在编写代码显示在屏幕上的文本,我收到了价值65,我知道要设置一定的像素和删除其他的像素,这样的像素排列,如:

@ 
@ @ 
@@@@@ 
@ @ 
@ @ 

在任何时候做我的代码“真知道”是“A”。它只知道65被显示为该模式。因为,正如你所说,你不能直接存储字母,只能使用二进制数字。

+1

很好的解释!也许你应该弥合二进制到十进制的差距,因为你声称“一切都是二进制”,然后声称计算机可以处理65 ;-) – 2009-11-08 18:01:39

+0

良好的表述,我认为这比OP的“它是更准确地解决OP的问题基于一个映射,说这样。“我开始写这样的效果,但你省去了我的麻烦:-) – 2009-11-08 18:03:20

+0

@Joachim:我认为这很清楚,”65“代表数值,而不是它的十进制表示。 – 2009-11-08 18:04:37

1

那么这个转换怎么会发生呢?

该转换仅被称为character encoding。计算机只理解字节和人(平均=))只能理解字符。计算机粗略地说,所有字节和属于这些字节的所有字符的映射使得它可以以人性化的方式呈现数据。这都是基于软件的(因此不是基于硬件的)。操作系统通常是关心这一点的人。

ASCII是最古老的字符编码之一。现在我们应该全部在UTF-8以避免Mojibake

1

转换用的ASCII值的代码输入到相应的字符是

int a; 
printf("enter the ASCII value : "); 
scanf("%d",&a); 
printf("%d is the ASCII of %c",a,a);