2009-11-08 442 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);