首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么RLP编码的长度-1024字符串是\xb9\x04\x00?

为什么RLP编码的长度-1024字符串是\xb9\x04\x00?
EN

Ethereum用户
提问于 2018-05-15 17:54:41
回答 1查看 254关注 0票数 0

Ethereum wiki RLP页面中,

如果一个字符串的长度超过55个字节,则RLP编码由一个值为0xb7的字节加上以二进制形式表示的字符串长度的字节长度,然后是字符串的长度,然后是字符串的长度。例如,长度-1024字符串将编码为\xb9\x04\x00,后面跟着该字符串。因此,第一个字节的范围是0xb8,0xbf。

首先,在python3中“狗”是如何超过55个字节的?我测试‘狗’和python3显示它是56个字节,这样我就可以理解‘狗’是0x83。有趣的是,cat&dog仍然是56个字节。

第二件事是,在python3中,len(‘string.’)= 1024显示1080字节。我不知道它是如何编码到\xb9\x04\x00的。

你能解释一下它怎么变成\xb9 9\x04\x00吗?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-05-15 18:53:17

“狗”是三个字节:"d“、"o”和"g“。不知道用Python做什么,我无法解释为什么您会看到不同的东西。

关于为什么长度为1024的东西以\xb9\x04\x00开头,您引用的页面部分解释了这一点:

  • 长度超过55个字节,所以第一个字节是0xb7加上表示长度所需的字节数。长度为1024,这需要两个字节来表示。(单个字节的范围为0-255。)所以0xb7 +2= 0xb9。
  • 第一个字节之后是字符串的长度。字符串的长度为1024,在十六进制中为0x400,因此接下来的两个字节是0x40和0x00。
  • 之后就是字符串本身。

因此,0xb94000\xb9\x40\x00是长度-1024字符串的正确前缀。

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

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

复制
相关文章

相似问题

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