当使用 scanf() 及其变体时,格式说明符%i
将接受十六进制(前缀为“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/C++ 前缀约定允许整数操作数为十六进制、八进制或十进制。当前的实现 usingsscanf()
自动执行此操作%i
,我很好奇是否可以将其修改为使用 iostream 而无需显式解析数字格式。