3

我有 4a0e94ca 等格式的十六进制值,我需要将它们转换为 IP,如何在 C# 中执行此操作?

4

3 回答 3

16

如果值表示 IPv4 地址,您可以使用该long.Parse方法并将结果传递给IPAddress 构造函数

var ip = new IPAddress(long.Parse("4a0e94ca", NumberStyles.AllowHexSpecifier));

如果它们代表 IPv6 地址,则应将十六进制值转换为字节数组,然后使用此 IPAddress 构造函数重载来构造 IPAddress。

于 2009-08-30T23:01:30.607 回答
3

好吧,采用这种形式的 IP 格式:

192.168.1.1

要将其转换为单个数字,您需要将每个部分或它们放在一起,同时将其向左移动 8 位。

long l = 192 | (168 << 8) | (1 << 16) | (1 << 24);

因此,您可以为您的号码反转此过程。

像这样:

int b1 = (int) (l & 0xff);
int b2 = (int) ((l >> 8) & 0xff);
int b3 = (int) ((l >> 16) & 0xff);
int b4 = (int) ((l >> 24) & 0xff);

- 编辑

其他张贴者可能在 C# 中有“更清洁”的方式,所以可能会在生产代码中使用它,但我确实认为我发布的方式是学习 IP 格式的好方法。

于 2009-08-30T22:59:59.660 回答
2

检查C# 将整数转换为十六进制并再次返回

    var ip = String.Format("{0}.{1}.{2}.{3}",
    int.Parse(hexValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(4, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(6, 2), System.Globalization.NumberStyles.HexNumber));
于 2009-08-30T23:01:13.417 回答