Binary 如何在tcl中将64位二进制字符串转换为十进制数?
我试图将64位二进制字符串值()转换为整数,但我显然达到了tcl限制,并得到:Binary 如何在tcl中将64位二进制字符串转换为十进制数?,binary,64-bit,tcl,decimal,Binary,64 Bit,Tcl,Decimal,我试图将64位二进制字符串值()转换为整数,但我显然达到了tcl限制,并得到: integer value too large to represent 二进制字符串: 000000000000101000000000000010100000000000000100 我用于将二进制转换为整数的过程是: proc binary2decimal {bin} { binary scan [binary format B64 [format %064d $bin]] I dec
integer value too large to represent
二进制字符串:
000000000000101000000000000010100000000000000100
我用于将二进制转换为整数的过程是:
proc binary2decimal {bin} {
binary scan [binary format B64 [format %064d $bin]] I dec
return $dec
}
我尝试使用64进行格式化,也尝试使用LI进行格式化,但没有任何效果。我读过关于“宽”的文章,但不明白它是否可以在这里应用
注:首先,我使用的是tcl 8.4,错误来自于默认的64位数字格式(出于向后兼容的原因),但我们实际上是在处理字符串,因此
%064s
(S
,而不是d
)是一个合适的修复方法
您真的应该切换到使用Tcl 8.5,这样做更容易:
甚至只是:
set dec [expr "0b$bin"]
在8.4中,您需要做更多的工作,因为64位支持要简单得多
binary scan [binary format B64 [format %064s $bin]] II d1 d2
set dec [expr {wide($d1)<<32 | wide($d2)}]
二进制扫描[二进制格式B64[格式%064s$bin]]II d1 d2
集合dec[expr{wide($d1)
binary scan [binary format B64 [format %064s $bin]] II d1 d2
set dec [expr {wide($d1)<<32 | wide($d2)}]