ton-deep-doc icon indicating copy to clipboard operation
ton-deep-doc copied to clipboard

Что такое TL: Кодирование bytes в TL: ошибка в кодирование массива размером 396

Open Cosmodude opened this issue 1 year ago • 2 comments

https://github.com/xssnick/ton-deep-doc/blob/master/TL.md#%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-bytes-%D0%B2-tl

[0xFE, 0x8C, 0x01, 0x00, байты массива] дает нам: [254, 140, 1, 0, данные массива]. 254 + 140 + 1 = 395 != 396 необходимо заменить 0x01 на 0x02 или 0x8C на 0x8D

Поправьте, если я чего-то не понимаю

Cosmodude avatar Jul 04 '23 10:07 Cosmodude

254 (0xFE) не является частью длины, а лишь служит индикатором что следующие 3 байта это длина.

0x01 это второй байт в big endian, каждая единица в нем идет за 256, получается 256+140=396

xssnick avatar Jul 04 '23 12:07 xssnick

Нашел хорошую статью по теме, подходит для совсем новичков: https://habr.com/ru/articles/233245/

Все равно не понимаю, как компьютер понимает, что длина "массива длины" равна 3

И разве в таком случае это не Little endian? 140 * 2^0 + 1 * 2^8 + 0 ^ 2 ^16 (от младшего к старшему)

Cosmodude avatar Jul 07 '23 00:07 Cosmodude