Rlp

為什麼長度為 1024 的 RLP 編碼字元串是 xb9x04x00?

  • May 15, 2018

乙太坊 wiki RLP 頁面中,

如果字元串的長度超過 55 個字節,則 RLP 編碼由一個值為 0xb7 的單個字節加上二進制形式的字元串長度的字節長度,然後是字元串的長度,最後是字元串。例如,長度為 1024 的字元串將被編碼為 \xb9\x04\x00 後跟字元串。因此,第一個字節的範圍是

$$ 0xb8, 0xbf $$.

首先,python3 中的“狗”如何超​​過 55 個字節?我測試 ‘dog’ 和 python 3 告訴我它是 56 字節,所以我可以理解 ‘dog’ 是0x83. 對我來說有趣的cat&dog是仍然是 56 字節。

第二件事是,在 python3 中, len(‘string…’) = 1024 顯示 1080 字節。我不知道它是如何編碼為 \xb9\x04\x00 的。

你能解釋一下它是如何變成\xb9\x04\x00的嗎?

“dog”是 3 個字節:“d”、“o”和“g”。在不知道你在 Python 中做什麼的情況下,我無法解釋為什麼你會看到不同的東西。

至於為什麼長度為 1024 的內容以 開頭\xb9\x04\x00,您引用的頁面部分對此進行了解釋:

  • 長度超過 55 個字節,所以第一個字節是 0xb7 加上表示長度所需的字節數。長度為1024,需要兩個字節來表示。(單個字節的範圍是 0-255。)所以 0xb7 + 2 = 0xb9。
  • 第一個字節之後是字元串的長度。字元串的長度是 1024,十六進制是 0x400,所以接下來的兩個字節是 0x40 和 0x00。
  • 之後就是字元串本身。

所以0xb94000, or \xb9\x40\x00, 是長度為 1024 的字元串的正確前綴。

引用自:https://ethereum.stackexchange.com/questions/48580