質問

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をサポートするすべてだと思うもの)HostToNetworkOrderReverseEndianness方法はdotnetcoreで同じ性能を有するます。

DOTNETの枠組み(net461)でただし、HostToNetworkOrderを呼び出すの性能はReverseEndiannessを呼び出すよりも遅く少し(かなり2倍ではない)である。

私は、JITコンパイラがこれらのメソッドは、BSWAPのx86命令を呼び出すために、実際に特殊なケースであると信じています。あなたが正確に独自のコードベースでReverseEndianness(long)メソッドの実装を複製した場合、それはSystem.Memoryの実装を呼び出すよりもほぼ4倍遅くなります。示唆JITの魔法が起こってあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top