@HamsterGamer

Как должна передаваться 20 байтная строка по протоколу UDP в формате big-endian?

Всем привет, долго пытался разобраться почему моя реализация announce к трекеру не получает нужный респоунс, решил заснифирить utorrent и сравнить каждый элемент из их запроса со своими. Вообщем, я быстро выяснил что единственная проблема - это то, что у нас отличаются info_hash:
мой info_hash:        "v\201\327|\r\270\265\227e\254\216[\275\316[\262\245\264g\006"
utorrent info_hash:  "|\327\201v\227\265\270\r[\216\254e\262[ν\006g\264\245"
Очевидно, что виновник в этом - Endianness, и действительно, разбив свою строку на массив из 5 4-х байтных чисел, а затем изменив их endian, я получил идентичную с utorrent строку! Стоит отметить, что все данные по протоколу необходимо передавать в формате Big-endian.
Но, в спецификациях которые я находил, явно указано что это либо 20 байтная строка, либо 20 байтный массив int8_t:
www.bittorrent.org/beps/bep_0015.html && https://www.libtorrent.org/udp_tracker_protocol.html (см. IPv4 announce request).
Прошу подсказать, разве однобайтная строка не будет выглядеть одинаково в любой форме endian? Помогите разобраться, почему тут необходимо изменять порядок байт (все торрент файлы, которые я пытался заанонсить у трекера выдавали невалидные данные, пока я не принял такой порядок info_hash)?
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Прошу подсказать, разве однобайтная строка не будет выглядеть одинаково в любой форме endian?

Для массива байт endianness не имеет значения. Если это действительно массив байт.
Info_hash похоже это не просто массив байт, а имеет внутреннюю структуру. По вашим ссылкам этой информации нет, видимо, надо копнуть глубже.
Так что делайте преобразование в BE.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы