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

写入文件时Binary format异常:写入0x80变为0x3F求助

问题分析与解决方案

嗨,这个问题我太熟悉啦!你遇到的异常是因为Tcl默认以文本模式打开文件,导致字节被编码转换了。

问题根源

当你用open "test.bin" "w"打开文件时,Tcl会把它当作文本文件处理,自动进行编码转换。0x80这个值在ASCII编码里并不是可打印字符,也不属于标准ASCII的有效范围(ASCII只到0x7F),所以Tcl会把它替换成0x3F——也就是问号?的ASCII值,这就是为什么你看到文件里是0x3F而不是预期的0x80。

解决方法

要写入原始二进制字节,你需要用二进制模式打开文件,也就是在打开模式里加上b,把"w"改成"wb"。这样Tcl就不会对写入的内容做任何编码转换,直接把字节写入文件。

修正后的代码如下:

set wf [open "test.bin" "wb"]
set int_result 0x80
puts -nonewline $wf [binary format c [expr {$int_result}]]
close $wf
exit

验证说明

  • open "test.bin" "wb":以二进制写模式打开文件,避免编码转换
  • binary format c:把整数转换成单字节的二进制数据,这部分你原来的写法是对的
  • puts -nonewline:确保不会额外写入换行符,保证只写入你想要的那个字节

运行这个修正后的脚本,再查看test.bin文件,里面就会是你预期的0x80啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:55:16