2013-04-13 52 views
4

mongodb中的INET_ATON()等效于什么?我正在使用带有mongodb的nodejs,所以如果nodejs中的等价物是可用的而不是足够好的话。等效于mongodb中的INET_ATON()

+0

您可能还想考虑IPv6支持:'inet_pton' – WiredPrairie

+0

对于nodejs,看起来您可以使用此模块。 https://www.npmjs.com/package/inet –

回答

2

这里是别人的从点分十进制字符串转换的IP地址为32位数字解决方案:

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

从这里:IP-addresses stored as int results in overflow?

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

1
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("."); 
}