2016-03-07 136 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