写入文件时出现二进制格式问题

时间:2018-05-29 12:44:31

标签: tcl

下面有一个简单的脚本将一个字节写入文件:

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

令人惊讶的是,该文件将包含0x3F,而不是0x80。 谁能解释一下发生了什么?

非常感谢, 梅德

2 个答案:

答案 0 :(得分:2)

默认情况下,Tcl更喜欢读写文本文件,这意味着它会对数据进行大量转换,以便您进入Tcl并转出文件。使用二进制数据时,您希望关闭这些数据。在wb的通话中使用w代替open(就像在C stdio' fopen()通话中一样),或使用fconfigure来放置set wf [open "test.bin" wb] 打开后将通道转换为二进制模式。

set wf [open "test.bin" w]
# It's the -translation option for historical/backward-compatibility reasons
fconfigure $wf -translation binary
b

他们是等同的; open在内部fconfigure调用if(t==(a[i])) { if(t1==(a[i+1])) { count++; continue; } continue; } 调用({1}}以完全设置该选项。

答案 1 :(得分:1)

快速修复:使用

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="console-1.html">I should cause an alert().</a><br>
<a href="one-console.html">I should cause an alert().</a><br>
<a href="con.html">I should NOT cause an alert().</a><br>
<a href="sole-1.html">I should NOT cause an alert().</a>

以二进制模式打开文件。