riple

Stay Hungry, Stay Foolish.

学习Tcl(五)——纠正自己一个错误的概念

0
阅读(38691)

在《学习Tcl(续三)》中我给出了一个在String和Binary类型之间转换的程序。编写这一程序的目的是为了区分Tcl中使用这两种数据类 型时的差异,并且通过编写程序的方式提供一个实际的应用方法。

    但是这个程序是错误的,程序中提到的String和Binary类型刚好相反。这一点是我在昨晚练习创建二进制文件时发现的。我按照错误的方法创建的文件 是预期文件大小的两倍。想一想为什么

    正确的程序如下:

set string_type [lindex $argv 0]
puts "string type : $string_type"
set numeric_type [binary format "H2" $string_type]
puts "numeric type : $numeric_type"
binary scan $numeric_type "H*" string_again
puts "string again : $string_again"
set numeric_again [binary format "H2" $string_again]
puts "numeric again : $numeric_again"

    当时导致我颠倒这两个概念的原因是:我认为能够显式地输出为数值的数据类型就是二进制类型,我认为puts会如实地把数据的原本形式输出到用户界面。

    先说第一个错误认识:能够显式地输出为数值的数据类型其实是String,是显示为数值的String。

    再说第二个错误认识:puts,顾名思义,是put string的意思。puts输出的内容,采用文本方式查看,都是String类型的。而我从用户界面和记事本里看到的,恰好都只能是字符,而不是二进 制。查看二进制文件需要在类似UltraEdit的软件中,使用HEX方式打开文件。

    综合上述认识,可以认为,通过用户界面和记事本看到的数据,如果和输入的原数据一模一样的话,那么原数据类型是String;反之,如果查看到的结果令人 意外的话,那么原数据类型就多半是Binary的。

    这本是一个很基本的概念,只是我在这些方面的知识不够扎实,造成了错误的,甚至是黑白颠倒的认识和理解。基本的概念并不等于清楚易懂的概念,甚至可能是被 我误解的概念,而我还浑然不觉呢。

    在此向可能被我误导的朋友道歉,并提醒被我误导的朋友,你在二进制数据类型上的认识可能也是不可靠的。

    相关链接:Working with binary data