Domanda

Ci sono netti per ospitare funzioni di conversione in C #? Googling e non trovando molto. : P

È stato utile?

Soluzione

IPAddress.HostToNetworkOrder e IPAddress.NetworkToHostOrder ?

Ogni metodo ha i sovraccarichi per 16, 32 e 64 bit interi.

Altri suggerimenti

@ risposta di Jon-Skeet è il più preciso in base alla tua domanda. Tuttavia, 'ntoh_' e 'hton_' funzioni C sono ampiamente utilizzati per tradurre tra little-endian e big -endian architetture .

Se la vostra intenzione è per eseguire le conversioni endianess , c'è un class BitConverter (classe statica nel gruppo del nucleo) che vi porta un modo più adatto. Specialmente quando:

  • Lavorare con array di byte (ampiamente utilizzati nei flussi di file o di rete).
  • Detecting endianess architettura della macchina runtime .
  • La conversione di strutture di base al di là di numeri interi (booleani, decimali), senza fusione di caratteri.
  • Il codice non è legato alle operazioni di rete (System.Net namespace).

Il System.Memory NuGet pacchetto comprende la classe statica System.Buffers.Binary.BinaryPrimitives, che comprende metodi statici per trattare con "endian", tra cui molti sovraccarichi di ReverseEndianness. Sul nucleo dotnet, HostToNetWorkOrder è implementato utilizzando questi metodi ReverseEndianness. Su un little-endian architettura (che credo è tutto quel supporto NET) HostToNetworkOrder e ReverseEndianness metodi hanno prestazioni identiche su dotnetcore.

Il quadro dotnet (net461), tuttavia, la performance di chiamare HostToNetworkOrder è leggermente (non del tutto 2x) più lento di chiamare ReverseEndianness.

Credo che il compilatore JIT è in realtà involucro speciale questi metodi per richiamare le istruzioni BSWAP x86. Se si duplica esattamente l'implementazione del metodo ReverseEndianness(long) nel proprio codice di base, sarà quasi 4 volte più lento di chiamare l'implementazione System.Memory; suggerendo c'è magia JIT accadendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top