【发布时间】:2020-01-05 00:55:33
【问题描述】:
当试图了解 base58check 的工作原理时,在比特币的referenced implementation 中,当计算容纳 base58 编码字符串所需的大小时,它使用了以下公式:
// https://github.com/bitcoin/libbase58/blob/master/base58.c#L155
size = (binsz - zcount) * 138 / 100 + 1;
其中binsz 是要编码的输入缓冲区的大小,zcount 是缓冲区中前导零的数量。 138 和 100 来自什么?为什么?
【问题讨论】:
-
这意味着每100个解码字符将变成138个编码字符或其他方式
-
这背后的理论是什么?
-
我不确定,我从未研究过比特币和选择 B58 编码背后的哲学。我的答案基于 B64,即
* 4 / 3。 Wiki 表示to avoid both non-alphanumeric characters and letters which might look ambiguous when printed如0, o, O和I, l, 1