【发布时间】:2013-04-13 12:22:11
【问题描述】:
mongodb 中的 INET_ATON() 等价物是什么?我正在将 nodejs 与 mongodb 一起使用,所以如果 nodejs 中的等价物可用,那就足够了。
【问题讨论】:
-
您可能还需要考虑 IPv6 支持:
inet_pton -
对于nodejs,看起来你可以使用这个模块。 npmjs.com/package/inet
mongodb 中的 INET_ATON() 等价物是什么?我正在将 nodejs 与 mongodb 一起使用,所以如果 nodejs 中的等价物可用,那就足够了。
【问题讨论】:
inet_pton
// ip example: 192.168.2.1
function inet_aton(ip){
// split into octets
var a = ip.split('.');
var buffer = new ArrayBuffer(4);
var dv = new DataView(buffer);
for(var i = 0; i < 4; i++){
dv.setUint8(i, a[i]);
}
return(dv.getUint32(0));
}
// num example: 3232236033
function inet_ntoa(num){
var nbuffer = new ArrayBuffer(4);
var ndv = new DataView(nbuffer);
ndv.setUint32(0, num);
var a = new Array();
for(var i = 0; i < 4; i++){
a[i] = ndv.getUint8(i);
}
return a.join('.');
}
【讨论】:
这是别人将 IP 地址从点分十进制字符串转换为 32 位数字的解决方案:
function dot2num(dot)
{
var d = dot.split('.');
return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);
}
【讨论】:
function inet_aton(ip){
var a = new Array();
a = ip.split('.');
return((a[0] << 24) >>> 0) + ((a[1] << 16) >>> 0) + ((a[2] << 8) >>> 0) + (a[3] >>> 0);
}
function inet_ntoa(n){
var a = ((n >> 24) & 0xFF) >>> 0;
var b = ((n >> 16) & 0xFF) >>> 0;
var c = ((n >> 8) & 0xFF) >>> 0;
var d = (n & 0xFF) >>> 0;
return(a + "." + b + "." + c + "." + d);
}
我的网站见下文/上文,与旧版浏览器兼容。
【讨论】:
这是 Javascript 中使用类型化数组的 ntoa 函数的一个版本。
function ntoa(ipInt) {
var buffer = new ArrayBuffer(4);
var uint8View = new Uint8Array(buffer);
var uint32View = new Uint32Array(buffer);
uint32View[0] = ipInt;
var ipSegments = [];
for (var i = 0; i < uint8View.length; i ++) {
ipSegments.push(uint8View[i]);
}
return ipSegments.join(".");
}
【讨论】: