您的位置:首页 >C++十进制转八进制方法详解
发布于2026-02-03 阅读(0)
扫一扫,手机访问
std::oct 是仅作用于整型输出的 I/O 操纵符,设置后使后续整数以八进制显示(如 64 输出为 100),不改变值本身、不支持浮点/字符串、不自动加前缀 0;生成字符串需用 std::format(C++20)或 std::stringstream。

std::oct 控制输出流进制,但只影响后续整数输出直接在 std::cout 上设置 std::oct 会切换整个流的整数输出格式为八进制,但它不改变值本身,也不返回字符串。常见误用是以为它能“转换”变量——其实只是格式化显示。
std::oct 是 I/O 操纵符,需配合 << 使用,例如:std::cout << std::oct << 64; 输出 100int、long 等)起作用std::dec 或 std::hex0(C 风格八进制字面量写法),如 64 输出为 100,不是 0100std::format(C++20)或 std::stringstream + std::oct如果目标是生成 std::string(比如存日志、拼接路径、传给 API),不能只靠 std::cout。C++20 起推荐用 std::format;更早版本用 std::stringstream 更可靠。
std::string s = std::format("{:o}", 64); → "100";加前缀写 "{:#o}" → "0100"std::ostringstream oss; oss << std::oct << 64; std::string s = oss.str(); // "100"
0:在 std::ostringstream 中加 std::showbase:oss << std::showbase << std::oct << 64; → "0100"std::showbase 对 std::oct 插入 0,对 std::hex 插入 0x,对 std::dec 无效果标准库已覆盖绝大多数场景。自己实现容易出错,比如忽略负数、边界值(0)、或效率低下。但若真需要:
n % 8,再倒序拼接;0 要单独处理-1 在 32 位下输出很长一串八进制数字;通常业务中八进制只用于非负权限/常量std::ostringstream 或 std::format 经过高度优化,比手写快且安全很多人卡在“为什么 int x = 0100; 是 64,但 std::cout << x; 却输出 64 而不是 100?”——这是三个不同阶段:
0100 是源码里的八进制字面量,编译期就转成整数值 64 存进 xstd::cin >> x 默认按十进制读,除非用 std::cin >> std::oct >> xstd::cout << x 默认十进制输出,必须显式加 std::oct 才变八进制显示最易被忽略的是流状态的持久性:std::oct 一旦设置,会影响之后所有同一流上的整数输出,包括第三方库的日志打印——建议用临时流或显式恢复 std::dec,别依赖全局流状态。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9