在MongoDB中类似于INET_ATON()的等效函数是什么?

4

在mongodb中,INET_ATON()的等效函数是什么?我正在使用nodejs和mongodb,如果有nodejs中的等效函数那就够了。


您可能还需要考虑IPv6支持:inet_pton - WiredPrairie
对于Node.js,看起来您可以使用这个模块。https://www.npmjs.com/package/inet - Paul Milham
4个回答

6
// 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('.');
}

http://rolfrost.de/ipjs.html


2

以下是另一种将IP地址从点分十进制字符串转换为32位数字的解决方案:

function dot2num(dot) 
{
    var d = dot.split('.');
    return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);
}

从这里开始:IP地址存储为int会导致溢出吗?


2
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);
}

根据我网站上的信息,兼容旧版浏览器。


0
这是使用类型化数组在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(".");
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接