簡體   English   中英

C-將char轉換為int

[英]C - Convert char to int

我知道要將任何給定的char轉換為int,此代碼是可能的[除了atoi()之外:

int i = '2' - '0';

但我從來不了解它是如何工作的,“ 0”的含義是什么,我似乎也沒有在網上找到任何有關它的解釋。

提前致謝!!

在C中,字符文字的類型為int [ 字符文字/ IBM ]

在您的示例中,數值'0'為48,數值'2'為50。當您執行'2' - '0' ,得到50 - 48 = 2 適用於從0到9的ASCII數字。

請參閱ASCII表以獲得更好的圖像。

編輯:感謝@ouah的更正。

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

關於intchar請注意, '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM