Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Cosmodude opened this issue Jul 4, 2023 · 2 comments

Comments

@Cosmodude
Copy link

Cosmodude commented Jul 4, 2023

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

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

@xssnick
Copy link
Owner

xssnick commented Jul 4, 2023

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

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

@Cosmodude
Copy link
Author

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants