【问题标题】:TCL save bigint to binaryTCL 将 bigint 保存为二进制
【发布时间】:2020-06-07 11:00:06
【问题描述】:

我在 TCL 8.6 中使用任意精度整数。

例如:

set x [expr {10**1000}]

如何将此数字保存为二进制? binary format 命令似乎对此不起作用。

我还需要能够稍后再读回号码。

我知道我可以使用循环执行 x & 0XFFFFx >> 16 一次转储每个单词,但我认为也许有一种直接转储内存的有效方法。

有什么想法吗?

【问题讨论】:

  • 你能用binary format pls.展示你的尝试吗?
  • 二进制是指由 1 和 0 字符组成的字符串,还是人类不可读的字面二进制数据?
  • 您是想将其转换为二进制数字(01)还是实际的二进制数据?

标签: binary tcl bigint


【解决方案1】:

如何将此数字保存为二进制?

分别使用formatscan 怎么样?

scan [format %llb $x] %llb

当您处理字符串而不是字节字符串时,它们是首选。

【讨论】:

    【解决方案2】:

    这取决于您希望使用的序列化格式。并且代码需要再次阅读。以及它需要多快。

    您可以使用的一种方法是以 ASN.1 BER 编码写入数字,该编码支持任意长度的二进制整数。

    这可以通过 tcllib 包 math::bignumASN.1 来完成:

    package require asn
    package require math::bignum
    
    set x [expr {10**100}]
    set bindata [asn::asnBigInteger [::math::bignum::fromstr $x]]
    

    从过程名称fromstr 可以看出,这不是最快的代码。

    如果您希望对整数使用其他序列化,您可以发明不同的方法,例如您已经发现的循环和移位。

    Tcl 的幼稚方法只是转储字符串表示,但这显然不太紧凑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2015-12-18
      • 2014-01-16
      • 1970-01-01
      • 2015-08-02
      相关资源
      最近更新 更多