Ruby网络字节顺序从字节值数组到本机字节序

时间:2011-07-20 16:49:10

标签: ruby networking ip endianness unpack

假设我有一个像arr = [24, 21, 25, 40, 236, 89]这样的数组,用于表示IP地址(前4个字节)和端口号(最后2个字节),如http://wiki.theory.org/BitTorrentSpecification#Tracker_Response中的二进制对等部分

我的问题是:如何从中获取IP地址和端口号?

IP的

arr[0..3].reverse.join '.'和端口的arr[5] << 8 | arr[4]似乎不正确。

我在这里假设,因为我string_from_tracker.unpack 'C*'获得arr,所以这些位已经是本机字节序...

我不确定这是怎么回事。

感谢。

1 个答案:

答案 0 :(得分:1)

什么是“不正确的部分”?即什么是预期的结果?

至少在这里你有一个bug。结合最后两个数字应该这样做:

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

给出了23020。看起来更像是Bittorrent端口号。

编辑:嘿:)其实这相当于上面的内容:

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