我在Github Gist中找到了Base58编码器的 MySQL 函数 。
DELIMITER $$
CREATE FUNCTION base58_encode (num int) RETURNS varchar(255)
DETERMINISTIC
BEGIN
DECLARE alphabet varchar(255);
DECLARE base_count int DEFAULT 0;
DECLARE encoded varchar(255);
DECLARE divisor DECIMAL(10,4);
DECLARE mode int DEFAULT 0;
SET alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
SET base_count = CHAR_LENGTH(alphabet);
SET encoded = "";
WHILE num >= base_count DO
SET divisor = num / base_count;
SET mode = (num - (base_count* TRUNCATE(divisor,0)));
SET encoded = CONCAT(SUBSTRING(alphabet FROM mode+1 FOR 1), encoded);
SET num = …Run Code Online (Sandbox Code Playgroud) 有谁知道有什么软件包支持将 base58 转换为十六进制字符串或从十六进制字符串转换为 base58 编码。下面是一个 python 实现的示例。
https://www.reddit.com/r/Tronix/comments/ja8khn/convert_my_address/
这个十六进制字符串<-“4116cecf977b1ecc53eed37ee48c0ee58bcddbea5e”应该导致:“TC3ockcvHNmt7uJ8f5k3be1QrZtMzE8MxK”
我有一个十进制数,我想将其作为 base58 字符串显示在屏幕上。我已经有了:
>>> from base58 import b58encode
>>> b58encode('33')
'4tz'
Run Code Online (Sandbox Code Playgroud)
这看起来是正确的,但是由于数字小于 58,因此生成的 base58 字符串不应该只有一个字符吗?我肯定错过了一些步骤。我认为这是因为我传递的是字符串“33”,而不是数字 33。
当我传入一个直整数时,出现错误:
>>> b58encode(33)
TypeError: a bytes-like object is required (also str), not 'int'
Run Code Online (Sandbox Code Playgroud)
基本上我想用 base58 编码一个数字,以便它使用尽可能少的字符......