写入文件时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
相关产品推荐
相关产品推荐

