Domanda
Ci sono netti per ospitare funzioni di conversione in C #? Googling e non trovando molto. : P
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.