C# 中有网络到主机的转换函数吗?谷歌搜索并没有找到太多。:P
3 回答
IPAddress.HostToNetworkOrder
和IPAddress.NetworkToHostOrder
?
每个方法都有 16、32 和 64 位整数的重载。
System.Memory nuget 包包含System.Buffers.Binary.BinaryPrimitives
静态类,其中包含用于处理“字节顺序”的静态方法,包括许多ReverseEndianness
. 在 dotnet core 上,HostToNetWorkOrder
是使用这些ReverseEndianness
方法实现的。在 little-endian 架构(我认为它支持 .NET)HostToNetworkOrder
和ReverseEndianness
方法在 dotnetcore 上具有相同的性能。
然而,在 dotnet 框架(net461)上,调用的性能比调用的性能HostToNetworkOrder
稍慢(不是 2倍) ReverseEndianness
。
我相信 JIT 编译器实际上是对这些方法进行特殊封装以调用 BSWAP x86 指令。如果您在自己的代码库中完全复制该ReverseEndianness(long)
方法的实现,它将比调用System.Memory
实现慢近 4 倍;暗示发生了 JIT 魔术。
根据您的问题,@jon-skeet 的回答是最准确的。然而,'ntoh_' 和 'hton_' C 函数被广泛使用,以便在little-endian 和 big-endian 计算机体系结构之间进行转换。
如果您的意图是执行字节顺序转换,那么有一个BitConverter 类(核心程序集中的静态类)可以为您带来更合适的方式。特别是在:
- 使用字节数组(广泛用于文件或网络流)。
- 检测运行时机器的字节序架构。
- 在不进行类型转换的情况下转换整数(布尔值、小数)以外的基本结构。
- 您的代码与网络操作(System.Net 命名空间)无关。