You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++文本转二进制文件运行后输出仍为明文问题求助

核心原因是你对「二进制文件」的概念存在误解

  • 所有文件本质上都是二进制文件,我们日常说的「文本文件」只是特殊的二进制文件:它存储的每一个字节的值都刚好对应ASCII/UTF-8等编码的可打印字符,所以用文本编辑器打开可以直接识别为可读文字。
  • 你写入char的逻辑是把原文本文件的每个字符原封不动写入新文件,这些字节本身就是可打印的ASCII值,哪怕用ios::binary模式打开输出流,写入的字节内容也不会发生变化,所以打开后还是明文。
  • 你测试写入int类型时得到乱码,只是因为int类型的内存二进制表示里包含大量不可打印字符:比如你写的int值5,32位小端存储的二进制表示为0x05 0x00 0x00 0x00,其中0x00是空字符,属于不可打印字符,文本编辑器无法识别就会显示为乱码,这不是什么「正确的二进制文件格式」,只是存储的内容不可打印而已。

ios::binary的作用不是转码

ios::binary标记唯一的作用是禁用流的换行符自动转换逻辑:在Windows平台下,文本模式写入\n会自动转换为\r\n,读取时\r\n会自动转换为\n;加上ios::binary标记后,流会严格按照你写入的字节内容读写,不做任何转换,完全不会修改你输入的字节值。


你的代码没有逻辑错误,只是没有达到你预期的「转码」效果

你当前的代码本质上就是做了一次文件复制,只是输出文件用二进制模式打开而已,没有对原内容做任何编码转换。如果你想要得到不可读的二进制文件,你需要自己定义编码规则对原文本内容做转换,比如:

  • 将文本中的数字字符串转换为对应的整型/浮点型二进制存储
  • 自定义加密规则对原文本字节做加密后存储
  • 把文本内容序列化到自定义的二进制结构体中存储

内容的提问来源于stack exchange,提问作者tommyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:06:02