Рубиновый сетевой порядок байтов до нативной последовательности из массива байтовых значений - PullRequest
0 голосов
/ 20 июля 2011

Скажем, у меня есть такой массив arr = [24, 21, 25, 40, 236, 89], который предназначен для представления IP-адреса (первые четыре байта) и номера порта (последние 2 байта), как в http://wiki.theory.org/BitTorrentSpecification#Tracker_Response, бинарной секции равноправных узлов.

У меня такой вопрос: как мне получить IP-адрес и номер порта от этого?

arr[0..3].reverse.join '.' для IP и arr[5] << 8 | arr[4] для порта, кажется, не правильно.

Я предполагаю, что поскольку я string_from_tracker.unpack 'C*' получаю arr, биты уже в исходном порядке байтов ...

Я не очень уверен, как это вообще должно работать.

Спасибо.

1 Ответ

1 голос
/ 20 июля 2011

Что такое "не правильная часть"?Т.е. каков ожидаемый результат?

По крайней мере, здесь у вас есть ошибка.Объединение двух последних чисел должно быть сделано так:

(arr[5] << 8) + arr[4]

Что дает 23020.Похоже на номер порта Bittorrent.

Edit : Хех :) На самом деле это эквивалентно приведенному выше:

(arr[5] << 8) | arr[4]
...