Rlp
為什麼長度為 1024 的 RLP 編碼字元串是 xb9x04x00?
如果字元串的長度超過 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 的字元串的正確前綴。