使用英特尔标准转换的C#负IP地址到点分十进制

时间:2012-12-11 14:50:12

标签: c#-4.0

我想在这方面得到一些帮助,因为我花了好几个小时才做到这一点,但我做不到。我想编写一个带有符号整数的函数,并使用英特尔标准算法将其转换为点分IP地址,这是一个例子:

IP地址192.168.18.188显示为-1139627840。要使用英特尔标准转换此IP地址,我必须执行以下步骤:

  1. 将(-1139627840)转换为十六进制值。 BC12A8C0。
  2. 反转十六进制字节,如下所示:CO A8 12 BC
  3. 将字节从十六进制转换为十进制,如下所示:192 168 18 188
  4. IP地址以下列格式显示:192.168.18.188
  5. 任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

我知道这不会回答你关于英特尔标准的问题,但只是把它扔出去(如果你试图重新发明轮子),你可以将int转换成这样的IP:

string ip = new IPAddress(BitConverter.GetBytes(-1139627840)).ToString();

答案 1 :(得分:1)

魔术在于结合:

  • >>运算符,它将数字中的位移到右侧
  • &运算符,它做了一点点而且(更常见的&&做了逻辑和)

这样的事情:

var number = -1139627840;
var b1 = number & 255;
var b2 = (number >> 8) & 255;
var b3 = (number >> 16) & 255;
var b4 = (number >> 24) & 255;
Console.WriteLine(string.Format("{0}.{1}.{2}.{3}", b1, b2, b3, b4));