首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RLP解码问题

RLP解码问题
EN

Ethereum用户
提问于 2018-03-08 13:56:33
回答 1查看 1.4K关注 0票数 2

我试图从RLP白皮书wiki中理解这意味着什么:“RLP的唯一目的是对结构进行编码;对特定的数据类型(例如字符串、浮点数)进行编码是留给高阶协议的;”

参考资料:https://github.com/ethereum/wiki/wiki/RLP

根据我的理解,RLP只是对结构进行编码,而不处理数据,而数据类型的解释则由自定义函数处理。有人能给我举个例子,说明这个输入是使用RLP编码的如下结构:

e:g:[“猫”,[],“猪”,“”,“羊”]

谢谢事先,如果有任何视频参考,仅为RLP将是非常有帮助的。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-03-08 14:24:36

从文档中摘取,您有以下公理:

如果字符串长度为0-55字节,则RLP编码由一个值为0x80的字节加上字符串的长度与字符串后面的字符串组成。因此,第一个字节的范围是0x80,0xb7。

如果列表的总有效载荷(即所有被RLP编码的项的合并长度)为0-55字节,则RLP编码由一个值为0xc0的字节加上列表的长度,然后连接这些项的RLP编码。因此,第一个字节的范围是0xc0,0xf7。

因此,[“猫”、[[]]、“猪”、““””、“羊”)的编码逻辑如下:

您会选择像0x83, 'c', 'a', 't'一样的cat "cat“是一个字符串,因此从0x80开始并添加字符串(3)的长度,这样它就给出了0x83,然后是字符串的字符。

[[]]是0xc1, 0xc0 --这个数组包含一个空数组。

因为0xc1是数组的长度(数组包含一个元素,此处[] ),而0xc0是第二个数组的长度(空元素)

“猪”和“猫”一样,一个由三个字符组成的字符串:0x83, 'p', 'i', 'g'

“”是一个由一个元素组成的数组,它是一个空字符串(0字符),因此它将编码为0xc1, 0x80 (0xc0 +1,0x80 + 0)

“绵羊”是一个5个字符的字符串,因此它将编码为:0x85, 's', 'h', 'e', 'e', 'p' (0x80 + 5,以及该字符串的每个字母)。

整个数组包含18个字节的值,因此它将编码为:

[ 0xd2, 0x83, 'c', 'a', 't', 0xc1, 0xc0, 0x83, 'p', 'i', 'g', 0xc1, 0x80, 0x85, 's', 'h', 'e', 'e', 'p'] (0xd2为0xc0 + 0x12,0x12为十进制中的18 )

为了清晰起见,没有用十六进制编码字符,但真正的编码如下所示:

[0xd2, 0x83, 0x63, 0x61, 0x74, 0xc1, 0xc0, 0x83, 0x70, 0x69, 0x67, 0xc1, 0x80, 0x85, 0x73, 0x68, 0x65, 0x65, 0x70]

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/42125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档