1
% binary scan [ binary format i* 146366987889541120] B* g
integer value too large to represent

谁能帮助我使用二进制格式 commnand 计算长整数值。但是我们遇到了错误,并且无法在语法中表示“l”(就像在 format command 中一样format %lx 146366987889541120)。

% format %lx  146366987889541120
208000000000000
%
%
% format %x  146366987889541120
0
%

任何人都可以建议我解决这个问题的方法吗?

4

1 回答 1

1

编辑:只需使用

format %llb 146366987889541120

如果你想要一个表示这个数字的二进制字符串。


如果您不处理宽整数(大于 64 位,使用 Tcl 8.5 添加),您可以使用

binary scan [ binary format w 146366987889541120] B* g

但是如果你有更长的整数,我发现最好的解决方法是:

# convert a binary string to a large integer
binary scan $bytes H* temp
set num [format %lli 0x$temp]
# convert a number to a binary string.
set bytes [binary format H* [format %llx $num]]

这有一些错误(前导零),所以你想为binary format.

set hex [format %llx $num]
if {[string length $hex]%2} {set hex 0$hex}
set bytes [binary format H* $hex]

但我怀疑这种方法能否产生最佳性能。

于 2013-10-21T14:02:45.540 回答