2014-02-06 3 views
0

Im способен конвертировать большинство вещей без проблем, поиск Google, если необходимо. Хотя я не могу понять этого.C++ Convert Ascii Int To Char To Int

У меня есть массив символов, как:

char map[40] = {0,0,0,0,0,1,1,0,0,0,1,0,1... etc 

Я пытаюсь преобразовать символ в правильное число, но независимо от того, что я стараюсь, я получаю значение ASCII: 48/49.

Я пробовал довольно много разных комбинаций конверсий и отливок, но я не могу получить 0 или 1, даже как символ.

Может ли кто-нибудь помочь мне с этим? Спасибо.

+0

http://stackoverflow.com/questions/5029840/convert-char-to-int-in-c-and-c – sajas

+1

Это выглядит ваш массив символов больше похож на это: { '0',» 0 ', ...,' 1 ', ...}, поскольку 48 и 49 являются записями ASCII для символов отображения 0 и 1. Пожалуйста, дайте нам дополнительную информацию. – ypnos

ответ

2

Диапазон ascii символов, представляющих целые числа, составляет от 48 до 57 (от «0» до «9»). Вы должны вычесть базовое значение 48 из символа, чтобы получить его целочисленное значение.

char map[40] = {'0','0','0','0','0','1','1','0','0','0','1','0','1'...}; 
int integerMap[40]; 

for (int i = 0 ;i < 40; i++) 
{ 
    integerMap[i] = map[i] - 48 ; 
    // OR 
    //integerMap[i] = map[i] - '0'; 


} 
1

Если символ является литералом, например. '0' (обратите внимание на кавычки), чтобы преобразовать в междунар вы должны сделать:

int i = map[0] - '0'; 

И, конечно, подобную операцию через ваш map массив. Также было бы разумным проверить ошибку, чтобы вы знали, что полученный int находится в диапазоне 0-9.

Причина, по которой вы получаете 48/49, состоит в том, что, как вы отметили, прямое преобразование литерала, такого как int i = (int)map[0];, дает значение ASCII символа.