Frage
Gibt es Netto-Umwandlungsfunktionen in C # zu hosten? Googeln und nicht viel zu finden. : P
Lösung
IPAddress.HostToNetworkOrder
und IPAddress.NetworkToHostOrder
?
Jede Methode hat Überlastungen für 16, 32 und 64-Bit-Integer.
Andere Tipps
@ jon-Skeet Antwort ist die genaueste nach Ihrer Frage. Allerdings 'ntoh_' und 'hton_' C-Funktionen werden in großem Umfang verwendet, um zwischen Little-Endian und big -endian Computerarchitekturen .
Wenn Ihre Absicht ist Endianess Conversions ausführen, es ist ein BitConverter Klasse (statische Klasse in der Kernbaugruppe), die Ihnen einen geeigneteren Weg bringt. Speziell wenn:
- Arbeiten mit Byte-Array (weit verbreitet in der Datei oder Netzwerk-Streams verwendet wird).
- Detecting Endianess Architektur der Laufzeitmaschine .
- Konvertieren von Basisstrukturen über ganze Zahlen (booleans, Dezimalzahlen) ohne Schublade gesteckt.
- Ihr Code ist nicht auf Netzwerk-Operationen zusammenhängen (System.Net-Namespace).
Die System.Memory nuget Paket enthält die System.Buffers.Binary.BinaryPrimitives
statische Klasse, die enthält statische Methoden für mit „Endian“, darunter viele Überlastungen von ReverseEndianness
beschäftigen. Auf Dotnet Kern, HostToNetWorkOrder
mit diesen ReverseEndianness
Methoden implementiert. Auf einer Little-Endian-Architektur (was ich denke, ist alles, was Unterstützung .NET) HostToNetworkOrder
und ReverseEndianness
Methoden haben identische Leistung auf dotnetcore.
Auf Dotnet Framework (net461) jedoch die Leistung HostToNetworkOrder
des Aufrufs ist etwas (nicht ganz 2x) langsamer als ReverseEndianness
aufrufen.
Ich glaube, dass der JIT-Compiler diese Methoden tatsächlich spezielle Gehäuse ist die BSWAP x86-Befehl aufzurufen. Wenn Sie genau die Umsetzung der ReverseEndianness(long)
Methode in Ihrer eigenen Code-Basis duplizieren, wird es fast 4x langsamer als die System.Memory
Implementierung gefordert wird; was darauf hindeutet, es JIT Magie geschieht.