ipToNumber 函数详解
🔢 script.js 把点分 IP 字符串转成小端 uint32。
📎 源码在线查看:
script.js#L194-L218(ipToNumber)
做什么
javascript
function ipToNumber(ip) {
var ipArr = ip.split(".");
var num = "";
ipArr.forEach(function (item) {
var a = parseInt(item);
num += ("0" + a.toString(16)).slice(-2);
});
return parseInt(num, 16);
}把 "192.168.1.1" → 各段转 hex 拼接 → parse 回 uint32。
示例
| 输入 | 中间 hex | 输出 uint32 |
|---|---|---|
| "192.168.1.1" | "c0a80101" | 3232235777 |
注意:这里得到的是大端排列的整数(192 在最高字节),但因为是 parseInt,数值本身是固定的。后续 ntohl 再决定内存字节序。
与 ntohl 的配合
ipToNumber 给出数值,ntohl 调整端序表示。两者一起把点分串转成 message 用的 uint32。
IPv4-mapped IPv6 处理
sockAddr.ip 可能是 ::ffff:192.168.1.1,ipToNumber 前需先 split(":").pop() 取出 IPv4 部分。