Это зависит от формата сериализации, который вы будете использовать sh. И код должен прочитать его снова. И как быстро это должно быть.
Один из способов, который вы могли бы использовать, - записать число в кодировке BER ASN.1, которая поддерживает двоичное целое число произвольной длины.
Это можно сделать с пакетами tcllib math :: bignum и ASN.1 :
package require asn
package require math::bignum
set x [expr {10**100}]
set bindata [asn::asnBigInteger [::math::bignum::fromstr $x]]
Как видно из названия процедуры fromstr
, это не самый быстрый из возможных кодов.
Если вы хотите sh использовать некоторую другую сериализацию для целых чисел, вы можете изобрести различные методы, такие как циклическое и сдвиговое, как вы уже обнаружили.
Наивным методом Tcl было бы просто сбросить строковое представление, но это, очевидно, менее компактно.