用于保存 base58 编码数据的缓冲区大小
Size of buffer to hold base58 encoded data
当试图了解 base58check 的工作原理时,在比特币 referenced implementation 中,在计算保存 base58 编码字符串所需的大小时,它使用了以下公式:
// https://github.com/bitcoin/libbase58/blob/master/base58.c#L155
size = (binsz - zcount) * 138 / 100 + 1;
其中 binsz
是要编码的输入缓冲区的大小,zcount
是缓冲区中前导零的数量。 138 和 100 是什么来的,为什么?
tl;博士
这是在 base58 <-> base256
转换期间估算输出大小的公式。
即 encoding/decoding 乘以 256 和 58
的部分 mod
编码输出是输入大小的 ~138%
(+1/四舍五入):
n * log(256) / log(58) + 1
(n * 138 / 100 + 1)
解码输出是输入大小的 ~73%
(+1/四舍五入):
n * log(58) / log(256) + 1
( n * 733 /1000 + 1)
当试图了解 base58check 的工作原理时,在比特币 referenced implementation 中,在计算保存 base58 编码字符串所需的大小时,它使用了以下公式:
// https://github.com/bitcoin/libbase58/blob/master/base58.c#L155
size = (binsz - zcount) * 138 / 100 + 1;
其中 binsz
是要编码的输入缓冲区的大小,zcount
是缓冲区中前导零的数量。 138 和 100 是什么来的,为什么?
tl;博士
这是在 base58 <-> base256
转换期间估算输出大小的公式。
即 encoding/decoding 乘以 256 和 58
编码输出是输入大小的 ~138%
(+1/四舍五入):
n * log(256) / log(58) + 1
(n * 138 / 100 + 1)
解码输出是输入大小的 ~73%
(+1/四舍五入):
n * log(58) / log(256) + 1
( n * 733 /1000 + 1)