# std::setbase

< cpp‎ | io‎ | manip

定义于头文件 `<iomanip>` |  |
/*unspecified*/ setbase( int base ); |  |

设置流的数值底。用于表达式 out << setbase(base) 或 in >> setbase(base) 时，取决于 `base` 的值，更改流 `out` 或 `in` 的 `basefield` 标志：

- 值 16 设置 `basefield` 为 std::ios_base::hex
- 值 8 设置 std::ios_base::oct
- 值 10 设置 std::ios_base::dec 。

异于 8 、 10 或 16 的 `base` 值重置 `basefield` 为零，这对应十进制输出和依赖前缀的输入。

### 参数

base | - | basefield 的新值

### 返回值

返回未指定类型的对象，使得若 `str` 为 std::basic_ostream<CharT, Traits> 或 std::basic_istream<CharT, Traits> 类型的流名称，则表达式 str << setbase(base) 或 str >> setbase(base) 表现为如同执行下列代码：

    str.setf(base ==  8 ? std::ios_base::oct :
                base == 10 ? std::ios_base::dec :
                    base == 16 ? std::ios_base::hex :
                         std::ios_base::fmtflags(0),
             std::ios_base::basefield);

### 示例

    #include <iostream>
    #include <sstream>
    #include <iomanip>
    int main()
    {
        std::cout << "Parsing string \"10 0x10 010\"\n";

        int n1, n2, n3;
        std::istringstream s("10 0x10 010");
        s >> std::setbase(16) >> n1 >> n2 >> n3;
        std::cout << "hexadecimal parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';

        s.clear();
        s.seekg(0);
        s >> std::setbase(0) >> n1 >> n2 >> n3;
        std::cout << "prefix-dependent parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';

        std::cout << "hex output: " << std::setbase(16)
                  << std::showbase << n1 << ' ' << n2 << ' ' << n3 << '\n';
    }

输出：

    Parsing string "10 0x10 010"
    hexadecimal parse: 16 16 16
    prefix-dependent parse: 10 16 8
    hex output: 0xa 0x10 0x8

### 参阅

dec hex oct | 更改用于整数 I/O 的基数 (函数)
showbase noshowbase | 控制是否使用前缀指示数值基数 (函数)