【问题标题】:Convert IP Address to UInt32/UInt64 in .NET Core在 .NET Core 中将 IP 地址转换为 UInt32/UInt64
【发布时间】:2016-11-03 20:17:58
【问题描述】:

我有一个 v4 IP 地址。我需要将其转换为 UInt32。 在常规 .NET 中,我使用的是:

string address = "192.168.1.1";
long intAddress = (long)(uint)IPAddress.NetworkToHostOrder((int)IPAddress.Parse(address).Address);

但 IPAddress.Address 在 .NET Core 中不可用。 换什么?

【问题讨论】:

  • 因为我正在根据一个 IP 地址为 UInt32 格式的表对地址进行地理编码。
  • @Quantic IPv4 存储为 4 个字节。 uint 存储为 4 个字节。说我疯了,但我认为有一个直接的转换。
  • @Abion47 dang,我现在只是充满了糟糕的 cmets,你是对的。

标签: c# .net asp.net-core


【解决方案1】:

使用GetAddressBytes

var intAddress = BitConverter.ToInt32(IPAddress.Parse(address).GetAddressBytes(), 0);

还有: How to convert an IPv4 address into a integer in C#?

【讨论】:

  • 我需要担心使用这种方法的大端/小端环境吗?
  • 我不这么认为。它看起来独立于平台in the source
  • 如果您将值存储为UInt32,无论您使用什么操作,字节序都将是一个潜在的问题,但如果此值将始终在 .NET 上下文中使用,那么它不应该是一个问题。但是,如果您对此感到担心,最好将 IP 地址存储为字节数组(甚至只是一个字符串)。
  • 是的,这给出了与 (long)(uint)IPAddress.NetworkToHostOrder((int)IPAddress.Parse(address).Address); 不同的结果;
  • @user1054922 实际上,您刚刚给出了一个字节序问题的示例。将这个答案和另一个答案都转换为字节数组(使用“127.0.0.1”作为输入),一个列出[127, 0, 0, 1],而另一个列出[1, 0, 0, 127]
【解决方案2】:
var address = IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(IPAddress.Parse(ipAddress).GetAddressBytes(), 0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多