При использовании scanf () и его вариантов спецификатор формата % i
будет принимать данные как шестнадцатеричные (с префиксом «0x»), восьмеричные (с префиксом «0») или десятичные (без префикса). ), поэтому, например, строки «0x10», «020» и «16» преобразуются в целое число с десятичным значением 16.
Можно ли это сделать с помощью std :: istream :: operator >>
отформатированный ввод?
При использовании простого >> i
без манипулятора ввода-вывода «0x10» преобразуется в ноль (или, скорее, ведущий 0 равен, часть «x10» не обрабатывается), а «020» - в 20. Манипуляторы hex
, oct
и dec
ведут себя как % x
, % o
и % d
соответственно. Я ищу общий манипулятор ввода целых чисел, который работает как % i
.
Интересно, что манипулятор шестнадцатеричный
принимает как «0x10», так и «10», преобразовывая их в десятичное 16.
Если вам интересно, я реализую оценщик выражений и хотел бы, чтобы целочисленные операнды были шестнадцатеричными, восьмеричными или десятичными с использованием соглашения о префиксе C / C ++. Текущая реализация с использованием sscanf ()
делает это автоматически, используя % i
, и мне любопытно, можно ли это изменить для использования iostream без явного анализа числового формата.