标识码的文字表述
注意:
该文本表示形式实际上并未显示在界面中(界面中永远为blob),因此它只是建议的约定。
我们指定规范的文本格式,在需要以文本格式打印或阅读主体时(例如在日志消息,事务浏览器,命令行工具,源代码中)建议使用此格式。
blob 的文本表述 b 为 rouped(Base32(CRC32(b) · b))其中
CRC32是一个四字节的校验序列,按照ISO 3309,ITU-T V.42和其他规定定义
Base32是RFC 4648中定义的Base32编码,未添加填充字符。
中间的点表示连接。
Grouped接受一个ASCII字符串,并-每5个字符插入一个分隔符(破折号)。最后一组可能包含少于5个字符。分隔符永远不会出现在开头或结尾。
文本表示通常以小写字母打印,但不区分大小写地进行解析。
因为标识码的最大大小为29个字节,所以文字表述将不超过63个字符(10乘以5加3个字符,中间有10个分隔符)。
提示:
canister的ID 0xABCD01 有检查顺序 0x233FF206(在线计算器);因此,最终ID为em77e-bvlzu-aq。
bash中从十六进制编码到十六进制的示例编码(可以将以下内容粘贴到终端中):
function textual_encode() {
( echo "$1" | xxd -r -p | /usr/bin/crc32 /dev/stdin; echo -n "$1" ) |
xxd -r -p | base32 | tr A-Z a-z |
tr -d = | fold -w5 | paste -sd'-' -
}
function textual_decode() {
echo -n "$1" | tr -d - | tr a-z A-Z |
fold -w 8 | xargs -n1 printf '%-8s' | tr ' ' = |
base32 -d | xxd -p | tr -d '\n' | cut -b9- | tr a-z A-Z
}
最后更新于
这有帮助吗?