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

有帮助吗?

解决方案

IPAddress.HostToNetworkOrderIPAddress.NetworkToHostOrder?

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

其他提示

@jon-skeet 的回答 根据你的问题是最准确的。然而,“ntoh_”和“hton_”C 函数被广泛使用,以便在 小端和大端计算机体系结构.

如果你的意图是 执行字节顺序转换, ,有一个 比特转换器类 (核心组件中的静态类)为您带来了更合适的方式。特别是当:

  • 使用字节数组(广泛用于文件或网络流)。
  • 检测字节顺序 运行时机器的架构。
  • 无需类型转换即可转换整数(布尔值、小数)以外的基本结构。
  • 您的代码与网络操作(System.Net 命名空间)无关。

System.Memory NuGet包包括System.Buffers.Binary.BinaryPrimitives静态类,其中包括为对付“字节顺序”静态方法,包括ReverseEndianness的大量重载。在DOTNET核心,HostToNetWorkOrder使用这些ReverseEndianness方法来实现。上的小端架构(我认为是所有支持.NET)HostToNetworkOrderReverseEndianness方法对dotnetcore相同的性能。

在dotnet的框架(net461)然而,主叫HostToNetworkOrder的性能略比调用ReverseEndianness慢(不太2×)。

我相信,JIT编译器实际上是特殊壳体这些方法来调用BSWAP x86指令。如果你完全复制在自己的代码库ReverseEndianness(long)方法的实现,这将是近4倍不是调用System.Memory实施较慢;这表明有JIT魔术发生。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top