Можно ли `std :: istream :: operator >> () `принимать целочисленные префиксы системы счисления, такие как спецификатор формата% i в stdio?

При использовании 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 без явного анализа числового формата.

10
задан Clifford 18 December 2010 в 05:27
поделиться