BitCoin源码研究(1)-Base58编码

Base58编码由58个数字和大小写字母组成,BitCoin源码中定义及注释如下:

成都创新互联公司于2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元漯河做网站,已为上家服务,为漯河各地企业和个人服务,联系电话:13518219792

/** All alphanumeric characters except for "0", "I", "O", and "l"*/

static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";

如unsigned char ucData[4] = { 0x39, 0x3a, 0x3b, 0x3c };的base58编码过程如下:

1、先计算ucData开头为0x00的个数 zeros ,这里zeros = 0;

    while (pbegin != pend && *pbegin == 0) {

        pbegin++;

        zeroes++;

    }

2、跳过开头的zeros个0x00,计算所需要的缓存

    int size = (pend - pbegin) * 138 / 100 + 1; // log(256) / log(58), rounded up.

3、256进制转58进制的计算

std::vector b58(size);

// Process the bytes.

while (pbegin != pend) {

    int carry = *pbegin;

    int i = 0;

    // Apply "b58 = b58 * 256 + ch".

    for (std::vector::reverse_iterator it = b58.rbegin(); 

                    (carry != 0 || i < length) && (it != b58.rend()); it++, i++) {

        carry += 256 * (*it);

        *it = carry % 58;

        carry /= 58;

    }

    assert(carry == 0);

    length = i;

    pbegin++;

}

4、输出编码结果

先在字符串前补上zeros 个1 ,后面的依次缀加DstByte对应的 pszBase58 字符


文章名称:BitCoin源码研究(1)-Base58编码
分享网址:http://bzwzjz.com/article/jdjpcj.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 高端网站设计 达州网站设计 响应式网站建设 成都网站制作 网站制作公司 网站建设公司 高端品牌网站建设 手机网站建设 营销网站建设 成都网站建设公司 成都响应式网站建设 成都h5网站建设 企业网站建设 成都网站建设 定制网站建设 营销型网站建设 企业网站制作 成都网站制作 成都网站设计 教育网站设计方案 成都网站建设 网站设计制作报价