用于保存base58编码数据的缓冲区大小

问题描述 投票:0回答:1

[试图通过bitcoin在referenced implementation中了解base58check的工作原理时,在计算保存base58编码的字符串所需的大小时,使用以下公式:

// https://github.com/bitcoin/libbase58/blob/master/base58.c#L155
size = (binsz - zcount) * 138 / 100 + 1;

其中binsz是要编码的输入缓冲区的大小,zcount是缓冲区中前导零的数量。 138和100来自何方?为什么?

bitcoin base58
1个回答
0
投票
tl; dr这是在base58 base256转换期间近似输出大小的公式。即您要分别乘以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)

© www.soinside.com 2019 - 2024. All rights reserved.