Binary 如何在tcl中将64位二进制字符串转换为十进制数?

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

我试图将64位二进制字符串值()转换为整数,但我显然达到了tcl限制,并得到:

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)}]