c++中如何将10进制整数转换为8进制_c++ oct格式化输出【详解】
技术百科
裘德小鎮的故事
发布时间:2026-01-15
浏览: 次 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 输出100 - 它对浮点数、字符串无效,只对整型(
int、long等)起作用 - 一旦设置,后续所有整数输出都会按八进制,除非重置为
std::dec或std::hex - 不会自动补前缀
0(C 风格八进制字面量写法),如64输出为100,不是0100
要得到带前缀的八进制字符串?用 std::format(C++20)或 std::stringstream + std::oct
如果目标是生成 std::string(比如存日志、拼接路径、传给 API),不能只靠 std::cout。C++20 起推荐用 std::format;更早版本用 std::stringstream 更可靠。
- C++20:
std::string s = std::format("{:o}", 64);→"100";加前缀写"{:#o}"→"0100" - C++11 及以上:
std::ostringstream oss; oss << std::oct << 64; std::string s = oss.str(); // "100"
- 若需前缀
0:在std::ostringstream中加std::showbase:oss →"0100" - 注意:
std::showbase对std::oct插入0,对std::hex插入0x,对std::dec无效果
手写转换函数?仅当需要控制细节(如固定宽度、符号处理)时才必要
标准库已覆盖绝大多数场景。自己实现

0)、或效率低下。但若真需要:
- 正数可循环取余:
n % 8,再倒序拼接;0要单独处理 - 负数八进制无统一标准——C++ 输出默认按补码解释(即先转无符号等价形式再输出),如
-1在 32 位下输出很长一串八进制数字;通常业务中八进制只用于非负权限/常量 - 性能上,
std::ostringstream或std::format经过高度优化,比手写快且安全
常见错误:混淆字面量、输入解析和输出格式
很多人卡在“为什么 int x = 0100; 是 64,但 std::cout 却输出 64 而不是 100?”——这是三个不同阶段:
-
0100是源码里的八进制字面量,编译期就转成整数值64存进x -
std::cin >> x默认按十进制读,除非用std::cin >> std::oct >> x std::cout 默认十进制输出,必须显式加std::oct才变八进制显示- 所以“输入八进制”“存储八进制”“输出八进制”三者完全独立,整数变量本身没有进制属性
最易被忽略的是流状态的持久性:std::oct 一旦设置,会影响之后所有同一流上的整数输出,包括第三方库的日志打印——建议用临时流或显式恢复 std::dec,别依赖全局流状态。
# 的是
# 这是
# 也不
# 很多人
# 不支持
# format
# c++
# String
# int
# stream
# 字符串
# 流进
# 整型
# 浮点
# 格式化输出
# 不改变
# 加前缀
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Linux如何安装Golang环境_Linux下G
- c++中的CRTP是什么 c++奇异递归模板模式【
- php内存溢出怎么排查_php内存限制调试与优化方
- 如何在Golang中使用container/hea
- Win11如何设置文件关联 Win11修改特定文件
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Win11怎么解压RAR文件 Win11自带解压功
- Django 密码修改后会话失效的解决方案
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- Win11 C盘满了怎么清理 Win11磁盘清理和
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- 如何在Golang中捕获HTTP服务器错误_Gol
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- Win11怎么查看wifi信号强度_检测Windo
- Win10怎么卸载迅雷_Win10彻底卸载迅雷方法
- C++如何使用std::transform批量处理
- c++中explicit(bool)的用法 c++
- Win10系统映像怎么恢复 Win10使用系统映像
- Win11怎么设置任务栏图标大小_Windows1
- 如何在Golang中使用内置函数_Golangle
- Win11搜索栏无法输入_解决Win11开始菜单搜
- php中$this和::能混用吗_对象与静态作用域
- php嵌入式需要什么环境_搭建php+linux嵌
- 如何在JavaScript中动态拼接PHP的bas
- Win10如何更改网络连接_Windows10以太
- Win11怎么关闭专注助手 Win11关闭免打扰模
- 如何在 Django 中修改用户密码后保持会话不丢
- Python项目维护经验_长期演进说明【指导】
- 如何关闭Win10自动更新更新_Win10系统自动
- Python项目回滚策略_发布安全说明【指导】
- Windows10电脑怎么设置电源按钮_Win10
- 如何在Golang中处理二进制数据_Golang
- php订单日志怎么按状态筛选_php筛选不同状态订
- Python数据挖掘核心算法实践_聚类分类与特征工
- Mac版Final Cut Pro入门_Mac视频
- 如何在Mac上搭建Golang开发环境_使用Hom
- Mac怎么查看活动监视器_理解Mac进程和资源占用
- Windows10系统怎么查看设备管理器_Win1
- Mac怎么设置登录项_Mac管理开机自启动程序【教
- Win11怎么查看局域网电脑_Windows 11
- Go 语言标准库为何不提供泛型 Contains
- 如何用::实现工具类方法调用_php静态工具类设计
- Windows10系统怎么查看硬盘健康_Win10
- 如何在Golang中定义接口_抽象方法和多态实现
- Windows如何拦截2345弹窗广告_Windo
- LINUX怎么查看进程_LINUX ps命令查看运
- Windows怎样关闭桌面弹窗广告_Windows
- Windows10如何查看保存的WiFi密码_Wi
- PHP主流架构怎么部署到Docker_容器化流程【
- Windows10电脑怎么查看硬盘通电时间_Win

QQ客服