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