Frage

Gibt es Netto-Umwandlungsfunktionen in C # zu hosten? Googeln und nicht viel zu finden. : P

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top