41

C# 中有网络到主机的转换函数吗?谷歌搜索并没有找到太多。:P

4

3 回答 3

54

IPAddress.HostToNetworkOrderIPAddress.NetworkToHostOrder

每个方法都有 16、32 和 64 位整数的重载。

于 2010-03-10T20:15:10.763 回答
5

System.Memory nuget 包包含System.Buffers.Binary.BinaryPrimitives静态类,其中包含用于处理“字节顺序”的静态方法,包括许多ReverseEndianness. 在 dotnet core 上,HostToNetWorkOrder是使用这些ReverseEndianness方法实现的。在 little-endian 架构(我认为它支持 .NET)HostToNetworkOrderReverseEndianness方法在 dotnetcore 上具有相同的性能。

然而,在 dotnet 框架(net461)上,调用的性能比调用的性能HostToNetworkOrder稍慢(不是 2倍) ReverseEndianness

我相信 JIT 编译器实际上是对这些方法进行特殊封装以调用 BSWAP x86 指令。如果您在自己的代码库中完全复制该ReverseEndianness(long)方法的实现,它将比调用System.Memory实现慢近 4 倍;暗示发生了 JIT 魔术。

于 2018-06-26T15:52:11.673 回答
1

根据您的问题,@jon-skeet 的回答是最准确的。然而,'ntoh_' 和 'hton_' C 函数被广泛使用,以便在little-endian 和 big-endian 计算机体系结构之间进行转换。

如果您的意图是执行字节顺序转换,那么有一个BitConverter 类(核心程序集中的静态类)可以为您带来更合适的方式。特别是在:

  • 使用字节数组(广泛用于文件或网络流)。
  • 检测运行时机器的字节序架构。
  • 在不进行类型转换的情况下转换整数(布尔值、小数)以外的基本结构。
  • 您的代码与网络操作(System.Net 命名空间)无关。
于 2014-02-19T14:41:34.480 回答