TCL语言的进制转换
2,384 Views『作者:RickyZhu 转载务必注明出处和作者』
Tag:programming
TCL语言的语法非常简单,只有一种数据类型,那就是String,因此没有数字的概念,所以数字的处理都需要借助一些方法进行。以前写过一个进制之间的相互转换的方法,是最基本的API,支持十进制到其他进制之间的转换。贴出来,供大家参考一下:
用法很简单,两个参数,第一个参数是十进制的值,第二个参数是进制,比如你要把100转成8进制,只要按照下面的方法调用即可:
dec2bin 100 8
proc dec2bin {dec change} {
set bin “”
set a 1
while {$a>0} {
set a [expr $dec/$change]
set b [expr $dec%$change]
set dec $a
set bin $b$bin
}
set len [string length $bin]
if {$len < 8 } {
for {set i 0} {$i<[expr 8-$len]} {incr i} {
set bin 0$bin
}
}
return $bin
}
另外,针对其他进制的转换,都可以利用TCL的方法format和scan进行。比如把一直16进制转成10进制就可以这么写:
set hex 0×3a
scan $hex %x decimal
puts $decimal
这样就把hex转成了十进制。其他类型的转换可以参考TCL的format方法帮助。

还有个办法,利用format命令:
set aaa [format “%08x” 1234]
Cool, Thanks Min~
scan的方法似乎不能转成除十进制外的数,比如你不能用它把16进制数转成8进制,format命令就没有这个缺点。但是楼上的格式控制我看很有意味。输出的格式意思为8格空间的16进制数,而且前面补零,呵呵 ! 举例: set aaa [format %-7f 0×3a]
感谢博主带来的好文章,(谢谢分享)又学到些新东西,且能自写一转换小函数,学习中。。。
u r right, Refer to the first comment ^_^