从字节缓冲区构建IP和端口

时间:2009-12-03 01:16:32

标签: lisp clojure

我有一个6字节长的字节缓冲区,前四个包含ip地址,最后2个包含端口,用大端符号表示。

获取我正在使用的IP,

(apply str (interleave (map int (take 4 peer)) (repeat ".")))

将int字节转换为int安全以获取IP地址吗?

以及我使用的java,

    int port = 0;
    port |= peerList[i+4] & 0xFF;
    port <<= 8;
    port |= peerList[i+5] & 0xFF;

这个片段获取端口地址。我该如何将其转换为clojure?

1 个答案:

答案 0 :(得分:2)

在这种情况下,

将它们映射到应该是安全的,因为通过写入更大的数据类型而导入的任何前导零将在转换为字符串时再次丢失

第二部分变得更容易,因为你从一个字节列表开始。

(+ (* 256 (nth 5 peer)) (nth 4 peer))

将字节列表转换为从here

拉出的数字的更通用的功能
(defn bytes-to-num [bytes] 
     (let [powers (iterate #(* % 256) 1)]
       (reduce + 0 (map * bytes powers))))