C#.Net Core 3.1:在使用System.Net.IPAddress字节顺序交换时遇到困难

C#.Net Core 3.1:在使用System.Net.IPAddress字节顺序交换时遇到困难,c#,ip-address,system.net,C#,Ip Address,System.net,很抱歉问一下什么应该是简单的事情,但我一直试图使用IPAddress.NetworkToHostOrder和IPAddress.HostToNetworkOrder都没有用。我在Windows平台上,小恩迪安。下面是让我困惑的小代码: using System; using System.Net; public class Program { public static void Main() { int addr = 1; Console.Wr

很抱歉问一下什么应该是简单的事情,但我一直试图使用
IPAddress.NetworkToHostOrder
IPAddress.HostToNetworkOrder
都没有用。我在Windows平台上,小恩迪安。下面是让我困惑的小代码:

using System;
using System.Net;

public class Program
{
    public static void Main()
    {
        int addr = 1;
        Console.WriteLine($"{IPAddress.NetworkToHostOrder(addr)}");
        Console.WriteLine($"{IPAddress.HostToNetworkOrder(addr)}");
    }
}
其输出为:

16777216
16777216

其中一个的输出应该是
1
,对吗?我已经放弃了,并编写了一个替换程序来处理字节顺序问题,但我无法使用
IPaddress
来处理这个问题,这让我抓狂。

这些函数假定您以给定的字节顺序提供了一个输入值,并且总是希望将字节顺序交换为相反的字节顺序。他们无法知道您提供的值的字节顺序。所以,他们总是交换给他们的东西的顺序


如中所述,这两个函数都存在的一个原因是用作文档,并指示您从/到的顺序(主机与网络)。

不,这是一个大脑缺陷。在您的机器上,网络顺序始终是大端,主机顺序始终是小端。因此,从一个到另一个的任何转换都必须颠倒字节顺序。假设
int addr=1
以任何方式表示相同的ip地址都是不正确的。如果查看实现,
NetworkToHostOrder
只调用
HostToNetworkOrder
。在BigEndian编译中,它总是返回传入的值,否则它会执行一些计算。汉斯·帕桑,1代表0.0.0.1。如果交换字节存储,则整数值为16777216。但是我想我明白我把事情弄糊涂了,上面的pinkfloydx33评论和链接很有帮助。谢谢,链接很有帮助。仍然不确定为什么这两个语句中的一个没有给我1,就像用1.0.0.0替换0.0.0.1一样。反之亦然。您在这两种情况下都通过了
0.0.0.1
。在这两种情况下,它都将字节顺序颠倒为
1.0.0.0