Lisp 从字节缓冲区构建IP和端口
我有一个字节缓冲区,6字节长,前四个包含ip地址,后两个包含端口,用大端符号表示 要获取我正在使用的ipLisp 从字节缓冲区构建IP和端口,lisp,clojure,Lisp,Clojure,我有一个字节缓冲区,6字节长,前四个包含ip地址,后两个包含端口,用大端符号表示 要获取我正在使用的ip (apply str (interleave (map int (take 4 peer)) (repeat "."))) 将字节强制转换为int可以安全地获取ip地址吗 在我使用的java中 int port = 0; port |= peerList[i+4] & 0xFF; port <<= 8; port |= peerList[
(apply str (interleave (map int (take 4 peer)) (repeat ".")))
将字节强制转换为int可以安全地获取ip地址吗
在我使用的java中
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
int端口=0;
端口|=peerList[i+4]&0xFF;
端口yes在这种情况下,将它们映射到应该是安全的,因为通过写入更大的数据类型引入的任何前导零在转换为字符串时都会再次消失
第二部分变得容易多了,因为您从一个字节列表开始
(+ (* 256 (nth 5 peer)) (nth 4 peer))
一个更通用的函数,用于将字节列表转换为从
只是一个与您的问题无关的随机注释:除了(interleave foo(repeat“”)
,您还可以执行更简单的(interpose“.foo)
。
(defn bytes-to-num [bytes]
(let [powers (iterate #(* % 256) 1)]
(reduce + 0 (map * bytes powers))))