質問
C# にはネットからホストへの変換関数はありますか?グーグルしてもあまり見つかりません。:P
解決
IPAddress.HostToNetworkOrder
そして IPAddress.NetworkToHostOrder
?
各メソッドには、16、32、および 64 ビット整数のオーバーロードがあります。
他のヒント
@jon-skeetさんの答え あなたの質問によれば、それが最も正確です。ただし、「ntoh_」および「hton_」C 関数は、相互間の変換を行うために広く使用されています。 リトルエンディアンとビッグエンディアンのコンピュータ アーキテクチャ.
もしあなたの意図が エンディアン変換を実行するには, 、があります。 BitConverterクラス (コア アセンブリの静的クラス) を使用すると、より適切な方法が得られます。特に次の場合:
- バイト配列を操作します (ファイルまたはネットワーク ストリームで広く使用されています)。
- エンディアンの検出 ランタイムマシンのアーキテクチャ。
- 型キャストを行わずに、整数 (ブール値、10 進数) を超える基本構造を変換します。
- コードはネットワーク操作 (System.Net 名前空間) に関連していません。
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倍遅くなります。示唆JITの魔法が起こってあります。