[英]C - Convert char to int
我知道要將任何給定的char轉換為int,此代碼是可能的[除了atoi()之外:
int i = '2' - '0';
但我從來不了解它是如何工作的,“ 0”的含義是什么,我似乎也沒有在網上找到任何有關它的解釋。
提前致謝!!
C中的所有字符都用整數值表示,即字符的ASCII碼。 例如,“ 0”對應於48,而“ 2”對應於50,因此'2'-'0'
使您50-48 = 2
鏈接到ASCII表: http : //www.robelle.com/smugbook/ascii.html
當使用逗號' '
您將數字視為一個字符,並且如果將其提供給int,則int將采用此字符的ASCII代碼的值。
用單引號引起來的任何字符文字都對應於代表該字符的ASCII碼的數字。 實際上,此類文字不算作char
,而是int
,因此它們可以與其他數字文字完全互換。
在表達式中, '2'
可與50
互換,而'0'
可與48
互換。
看一下ASCII表。
'0'
表示為0x30, '9'
表示為0x32。
這導致
0x32 - 0x30 = 2
都是關於相應字符的ASCII碼 。
在C語言中,所有數字(0至9)都按ASCII值48至57順序編碼。 因此, '0'
實際上得到值48,而'2'
具有值50。因此,當您寫int i = '2' - '0';
,實際上是從50中減去48,得到2。
在所有字符集中,確保C中的'0'
至'9'
是順序值。 這不限於ASCII,C也不限於ASCII字符集。
因此,這里的順序表示'2'
值為'0' + 2
。
關於int
和char
請注意, '0'
和'9'
值在C語言中為int
類型,而不是char
類型。 字符文字的類型為int
。
這兩個術語在內部均由數字的ASCII碼表示,並且數字具有連續的ASCII碼,將它們相減可得出兩個數字之間的差。
您也可以對字符進行類似的操作,例如,通過從小寫字符中減去32將小寫字母轉換為大寫字母
'a' - 32 = 'A'
這僅是因為ASCII按順序將代碼分配給字符,即“ 2”的字符代碼比“ 0”的字符代碼大2。
在另一種編碼中,它將不起作用。
當將char轉換為int時,它實際上將每個字符映射到ascii表中的適當數字。
這意味着'2' - '0'
被轉換為50 - 48
。 因此,您也可以用相同的方式找出兩個字母的數字距離,例如'z' - 'a'
等於122 - 97
等於25
您可以在此表中查找每個ASCII字符的數字表示形式: http : //www.asciitable.com/
實際上, char
只是一個無符號字節:C只是針對不同的操作將其區別對待。 例如, printf(97)
產生97
作為輸出,但是printf((char)97)
將給您'a'
作為輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.