C#にネットからホストへの変換機能はありますか?グーグルしてあまり見つけられない。 :P
IPAddress.HostToNetworkOrder
および IPAddress.NetworkToHostOrder
?
各メソッドには、16、32、および64ビット整数のオーバーロードがあります。
@ jon-skeetの答え あなたの質問によると最も正確です。ただし、「ntoh_」および「hton_」C関数は、 リトルエンディアンとビッグエンディアンのコンピュータアーキテクチャ の間を変換するために広く使用されています。
エンディアン変換を実行することがである場合、 BitConverterクラス (静的クラスより適切な方法をもたらすコアアセンブリ)。特に次の場合:
System.Memory nugetパッケージには、_System.Buffers.Binary.BinaryPrimitives
_静的クラスが含まれています。これには、ReverseEndianness
の多くのオーバーロードを含む「エンディアン」を処理するための静的メソッドが含まれています。 dotnetコアでは、HostToNetWorkOrder
はこれらのReverseEndianness
メソッドを使用して実装されます。リトルエンディアンアーキテクチャ(.NETをサポートしているのはこれだけだと思います)では、HostToNetworkOrder
メソッドとReverseEndianness
メソッドのパフォーマンスはdotnetcoreで同じです。
ただし、dotnetフレームワーク(net461)では、HostToNetworkOrder
の呼び出しのパフォーマンスは、ReverseEndianness
の呼び出しよりもわずかに(2倍ではありません)遅くなります。
JITコンパイラは、実際には、BSWAPx86命令を呼び出すためにこれらのメソッドを特別にケーシングしていると思います。独自のコードベースでReverseEndianness(long)
メソッドの実装を正確に複製すると、_System.Memory
_実装を呼び出すよりも約4倍遅くなります。 JITマジックが起こっていることを示唆しています。