Tcl无法以二进制格式保存浮点数

时间:2019-03-25 04:21:04

标签: tcl

我正在尝试以二进制格式(单浮点数)保存数字列表 但是Tcl无法正确保存它,当我从vb.net读取文件时我无法获得正确的数字

set outfile6 [open "btest2.txt" w+]
fconfigure stdout  -translation binary -encoding binary
set aa {}
set p 0
for {set i 1} {$i <= 1000 } {incr i} {
  lappend aa [expr (1000.0/$i )]
  puts -nonewline $outfile6 [binary format "f" [lindex $aa $p]]
  incr p
}
close $outfile6

1 个答案:

答案 0 :(得分:0)

  

Tcl无法正确保存

您的代码段中有两个小故障:

  • lindex周围的嵌套命令评估缺少的括号(请参阅我的评论):[lindex $aa $p]
  • fconfigure而不是stdout fconfigure $outfile6 -translation binary

在修复此问题之后,以下对我有用:

set outfile6 [open "btest2.txt" w+]
fconfigure $outfile6 -translation binary
set aa {}
set p 0
for {set i 1} {$i <= 1000 } {incr i} {
  lappend aa [expr (1000.0/$i )]
  puts -nonewline $outfile6 [binary format "f" [lindex $aa $p]]
  incr p
}

close $outfile6

改进建议

您的摘要对我来说似乎过于复杂。循环构造。简化为:

  • 更好地使用[scan %f $value]而不是[expr]显式地将值转换为浮点表示形式?
  • [二进制格式]使用计数器或通配符(例如f*)来处理多个值:[binary format "f*" $aa]
  • 您不需要循环变量p,请使用[lindex $aa end];或者最好使用循环变量来保存添加的单个元素(而不是再次从列表中收集元素)。
  • -translation binary暗示-encoding binary