binary - 如何将 64 位二进制字符串转换为 tcl 中的十进制数?

标签 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
     return $dec
  }

我试过使用 64 进行格式化,也试过 LI 无济于事。我读到有关“宽”的内容,但不明白它是否可以在这里应用。

附言:我使用的是 tcl 8.4

最佳答案

首先,错误来自 format,默认情况下它对 64 位数字不是很满意(出于向后兼容性的原因),但我们实际上是在处理一串字符在那里,所以 %064s(s,而不是 d)是一个合适的修复。

您真的应该改用 Tcl 8.5,因为这容易得多:

binary scan [binary format B64 [format "%064s" $bin]] W dec

甚至只是:

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

这有点不明显,但 I 格式一直被记录为仅适用于 32 位值。所以我们在扫描后将两个(大端)半值拼接在一起。

关于binary - 如何将 64 位二进制字符串转换为 tcl 中的十进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250378/

相关文章:

C 编程位表示

text - 如何确定 .NET 中文件的内容类型?

regex - TCL/EXPECT中正则表达式的含义

tcl - 如何使用 tcl 使用 cmd 提示符运行带有参数的 VB 脚本

C# 文件读/写文件共享似乎不起作用

python - 有人可以解释 Python 结构解包吗?

c++ - Windows Web 服务框架中出现无法识别的错误

c# - 适用于 Windows x64 上大文件的良好 ISAM 库或其他简单文件管理器

c++ - 如果从 64 位进程安装,Windows 服务是否是 64 位的?

tcl - 文件上次修改时间,精度为毫秒