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

Чета в текстов файл за симулиран компилатор и се опитвам да токенизирам всички литерали. Когато разбера, че това е числова стойност, се опитвам да запазя числото. Въпреки това, тъй като целият ред, от който чета, е низ, получавам само ASCII стойността за числото (т.е. 0 става 48), когато наистина се нуждая от стойността 0. Има ли някакъв начин да получа литералната стойност от string/char, който гледам?

пример:

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