以下一种编码任意结构的二进制数据的序列化方法。
假定可能的数据结构:
其中代表字节集合。因而是所有字节的序列的集合(或者是字节数组,可以想象成树结构的叶子)。是所有类树(子)结构的集合,这里的树结构布置仅一个树叶(可以想象成一个树的分支节点)。 是所有字节数组的集合和类似结构的序列。
以分段函数定义RLP,第一段处理当x 是字节序列时的实例;第二段处理当x是其他值时
如果x是一个字节数组,包含在中,那么RLP序列产生方法有三种
- 如果字节数组仅包含单一字节(并不是说长度8bit的一个字节数据)且字节长度小于128位,RLP输出的序列就是输入
- 如果字节数组少于56字节,RLP输出的二进制序列就是字节数组的加上前缀,前缀是长度是字节数组长度加上128
- 否则,输出等于输入加上长度最小字节数组的长度的前缀,当以big-endian编译时,前缀长度等于输入字节数组的长度,它本身的前缀是数字忠实编码的长度值加上183所需的字节数。(这里不知道怎么理解,直译过来的)
定位为
BE是一个函数,把正整数扩展成一个最小长度的big-endian 字节数组,点运算符表示拼接序列。
相反的,如果x是其他值,需要被转化成其他符号的序列,则RLP序列输出用以下两种方法:
- 如果每个包含项的串联序列化长度小于56个字节,则输出等于串联字节数组加上前缀,该前缀长度等于此字节数组的长度加上192。
- 否则,输出等于以最小长度字节数组为前缀的串联序列化当被解释为big-endian整数时,它等于拼接的serialisations字节的长度数组,其本身以忠实编码此长度值加上247所需的字节数为前缀。
定位为
如果RLP被用来编码一个标量,仅作为一个正整数(),它必须被编码为最短字节数组这样用big-endian编码时长度才会相等。因此一些正整数 的RLP可以被定义为
当译码RLP数据时,如果一段译码后的字节序列是一个标量并且以0开头,客户端会认为它是一个非典型的序列,认为它是无效RLP数据并完全丢弃它。
对于有符号数和浮点数并没有权威的编码格式