Преобразование значения ASCII непосредственно в буквальное целочисленное значение

Я читаю текстовый файл для симулированного компилятора и пытаюсь токенизировать все литералы. Когда я понимаю, что это числовое значение, я пытаюсь сохранить число. Однако, поскольку вся строка, которую я читаю, представляет собой строку, я получаю только значение ASCII для числа (т.е. 0 становится 48), когда мне действительно нужно значение 0. Есть ли способ получить буквальное значение из строка/символ, на который я смотрю?

пример:

std::string IR = "set 0, read"            
int currentIRIndex = 4 // (looking at the 0 char)    

IR[currentIRIndex] равен 0, если я вызываю его из оператора <<, и 48 (значение ASCII, равное 0), если я присваиваю его целому числу.


person LeoVannini    schedule 28.04.2014    source источник
comment
Вы хотите преобразовать один символ за раз или проанализировать столько цифр, сколько сможете найти?   -  person Mark Ransom    schedule 29.04.2014
comment
Хотя есть много (лучших) способов преобразовать строку в число, я удивлен, что вы хотя бы не рассмотрели cout << IR[currentIRIndex] -48 << "\n";   -  person DavidO    schedule 29.04.2014
comment
Меня беспокоит только текущий номер, на который я смотрю. @DavidO Боже мой .... какое простое решение. Разговор о функциональной неподвижности..... ›_‹   -  person LeoVannini    schedule 29.04.2014
comment
У всех нас есть такие моменты, я полагаю. ;)   -  person DavidO    schedule 29.04.2014


Ответы (1)


int v = IR[currentIRIndex] - '0';

это даст вам буквальное значение

person Boo    schedule 28.04.2014
comment
Это, казалось, не работало несколько минут назад, но теперь, кажется, работает. Спасибо еще раз. - person LeoVannini; 29.04.2014
comment
@LeoVannini: обратите внимание, что это не всегда работает для алфавита, но всегда работает для десяти латинских цифр. - person Mooing Duck; 29.04.2014
comment
это работает в вашем случае использования с 1 символом в качестве числа, если вы работаете с номером › 9, этого не будет, и вам придется использовать решение для преобразования строки в int, например atoi, или повысить lexical_cast или напрямую с потоком - person Boo; 29.04.2014