C#中是否有net to host转换功能?谷歌搜索并没有找到太多。 :P
答案 0 :(得分:39)
IPAddress.HostToNetworkOrder
和IPAddress.NetworkToHostOrder
?
每个方法都有16,32和64位整数的重载。
答案 1 :(得分:1)
@jon-skeet's answer是最准确的。但是,'ntoh_'和'hton_'C函数被广泛用于在little-endian and big-endian computer architectures之间进行转换。
如果您的意图执行字节序转换,则会有一个BitConverter class(核心程序集中的静态类)为您提供更合适的方式。特别是在:
答案 2 :(得分:0)
System.Memory nuget包包括System.Buffers.Binary.BinaryPrimitives
静态类,该类包括用于处理“字节序”的静态方法,其中包括ReverseEndianness
的许多重载。在dotnet核心上,HostToNetWorkOrder
是使用这些ReverseEndianness
方法实现的。在小字节序的体系结构(我认为是全部支持.NET)上,HostToNetworkOrder
和ReverseEndianness
方法在dotnetcore上具有相同的性能。
在dotnet框架(net461)上,调用HostToNetworkOrder
的性能比调用ReverseEndianness
稍慢(不是2倍)。
我相信JIT编译器实际上是这些方法的特殊封装,以调用BSWAP x86指令。如果您在自己的代码库中完全复制ReverseEndianness(long)
方法的实现,则它的速度将比调用System.Memory
实现的速度慢将近4倍;提示正在发生准时制魔术。