如何使用CoffeScript将IPv4转换为Integer?

Mar*_*rco 6 javascript ip integer coffeescript

在CoffeeScript中,我如何将IP(标准IPv4 127.0.0.1)转换为整数?

编辑:这里有很多很棒的答案,谢谢大家!

ell*_*ben 4

编辑:咖啡脚本

ipStringToInteger = (x) ->
  res = 0
  (res = res * 256 + Number(y) for y in x.split("."))
  res
Run Code Online (Sandbox Code Playgroud)

编译为

var ipStringToInteger;
ipStringToInteger = function(x) {
  var res, y, _i, _len, _ref;
  res = 0;
  _ref = x.split(".");
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    y = _ref[_i];
    res = res * 256 + Number(y);
  }
  return res;
};
Run Code Online (Sandbox Code Playgroud)

一个简短的纯 Javascript 实现是

var ipV4StringToInteger = function(string) {
  var parts = string.split(".");

  var sum = 0;

  for(var i = 0; i < 4; i++) {
    var partVal = Number(parts[i]);
    sum = (sum << 8) + partVal;
  }

  return sum;
};
Run Code Online (Sandbox Code Playgroud)

一个好的纯 Javascript 实现是

var ipV4StringToInteger = function(string) {
  var parts = string.split(".");
  if(parts.length != 4)
    throw new Error("IPv4 string does not have 4 parts.");

  var sum = 0;

  for(var i = 0; i < 4; i++) {

    var part = parts[i];
    if(!part.match("^\\d+$"))
      throw new Error("Non-digit, non-period character in IPv4 string.");

    var partVal = Number(part);
    if(partVal > 255)
      throw new Error("IPv4 string contains invalid value.");

    sum = ((sum << 8) + partVal) >>> 0;
  }

  return sum;
};
Run Code Online (Sandbox Code Playgroud)