2016-03-07 131 views
0

我使用fgetc()方法從C中的文件中讀取了一些Ascii值。 它將數字轉換爲它們的Ascii數字,例如:數值4等於52,因爲它是Ascii代碼,以及所有整數。將ASCII編碼轉換爲它的ASCII字符代碼 - C(不打印!)

現在所有關於這個的答案使用pritf("%c",c)簡單地將52轉換爲4但我想將值4存儲在一個整數變量。

SomeCode:

int writeFileToArray(FILE* file, int* a, int length) 
{ 
    int i = 0; 
    char temp; 
    if (file == NULL) 
    { 
     return -1; 
    } 
    else 
    { 
     while (i < length) 
     { 
      *(a + i) = fgetc(file); 
      i++; 
     } 
     return 1; 
    } 
} 

非但沒有52,53,54等,以我想4,5,6等

感謝您的幫助數組。

回答

4

處理ASCII編碼時相當簡單。只需從ASCII值中減去48即可轉換爲表示的數字。

int actualNumber = asciiValue - 48; 

根據您輸入的數據有多可靠,它通常是明智的範圍檢查輸入實際上是對「9」範圍「0」。如果您盲目地將該公式應用於不代表數字的ASCII值,您可以獲得一些非常奇怪的結果。

+4

你甚至可以減去char''0'而不是48來避免魔法常量 –

+0

是的。發佈後我自己得到的問題。謝啦。 – God

+2

@Lashane使用「0」並不總是適用於角落的情況,但實際上在大多數編碼中都是如此。 OP想要將_ASCII_字符轉換爲數字值。 「0」是源代碼編碼中字符0的值,可能不是ASCII。因此,如果代碼需要移植到一個非常罕見的EBCDIC機器上,或者可能會移植到一個新的幻想平臺上,使用'#define ASCII_0 48 int actualNumber = asciiValue - ASCII_0;'是有道理的。 – chux