在 JavaScript 中将无符号 32 位十进制转换为相应的 ipv4 地址

什么是ipv4地址

在介绍如何将无符号32位十进制转化为相应的ipv4地址前,我们首先要了解什么是ipv4地址。ipv4地址是一个4个字节的32位二进制数字,一般表示成“点分十进制”的形式,即由四个0~255的十进制数通过“.”连接而成的字符串。

举例来说明:

192.168.1.1

以上就是一个ipv4地址的例子,其中,192、168、1、1是每个字节所表示的二进制位。

无符号32位十进制转ipv4地址

由于ipv4地址是一个32位二进制数,因此,在JavaScript中将一个无符号32位十进制的数转换成相应的ipv4地址,我们要先将其转换成32位二进制数,然后每8位进行一次转换,将每8位二进制数再转换成十进制数,最终得到一个“点分十进制”的字符串。

无符号32位十进制转32位二进制数

在JavaScript中,我们可以使用toString()方法将一个无符号32位十进制的数转换成32位二进制数,同时该方法还可以指定进制的基数。例如:

let num = 3221225984; // 对应的二进制数为 11000000 10101000 00000001 00000000

let binaryStr = num.toString(2); // 二进制字符串为: 11000000101010000000000100000000

32位二进制数转ipv4地址

将32位二进制数转换成ipv4地址,首先我们要将其分成4段,每段长度为8个二进制位。在JavaScript中,我们可以使用parseInt()方法将每段二进制数转换成十进制数,并用"."连接起来构成一段ipv4地址。

function parseIP(addr) {

let binaryStr = addr.toString(2); // 将十进制数转换为32位二进制字符串

let segments = binaryStr.match(/\d{1,8}/g); // 将二进制字符串按照8位一段进行分割

return segments.map(s => parseInt(s, 2)).join("."); // 将每个二进制段转换成十进制数,并用“.”连接

}

console.log(parseIP(3221225984)); // "192.168.1.0"

函数解释

parseIP函数的主要实现步骤如下:

使用toString(2)将无符号32位十进制数转换成32位二进制字符串。

使用正则表达式match()方法将32位二进制字符串按每8位一段分割成4个二进制段。

对于每个二进制段,使用parseInt()方法将其转换成十进制数。

使用join()方法将每个十进制数用“.”连接起来,构成一个ipv4地址字符串。

返回构成的ipv4地址字符串。

小结

将无符号32位十进制数转换成相应的ipv4地址是一个十分常用的编程需求,也是网络通讯开发中非常常见的操作。

在JavaScript中,我们可以通过toString()方法将十进制数转换成二进制字符串,然后使用正则表达式match()方法将32位二进制字符串按照8位一段分割成4个二进制段,最后通过parseInt()方法将每个二进制段转换成十进制数,并将其用“.”连接起来构成ipv4地址。