C # int zu Byte []
Brauche ich zum konvertieren einer int
zu einem byte[]
einen Weg, es zu tun, ist die Verwendung BitConverter.GetBytes()
. Aber ich bin nicht sicher, ob das entspricht der folgenden Spezifikation:
Einem XDR-Ganzzahl mit Vorzeichen 32-bit datum, dass für eine ganze Zahl im
der Bereich [-2147483648,2147483647]. Die ganze Zahl ist dargestellt in
Zweierkomplement-notation. Die meisten und am wenigsten signifikanten bytes
0 und 3, beziehungsweise. Ganzzahlen werden wie folgt deklariert:
Quelle: RFC1014 3.2
Wie könnte ich einen int zu byte-transformation, das würde genügen die oben genannte Spezifikation?
InformationsquelleAutor der Frage Peter | 2009-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
RFC ist nur ein Versuch zu sagen, dass eine Ganzzahl ist ein normaler 4-byte-integer mit der Byte bestellt, die in einem big-endian-Weise.
Nun, Sie sind wahrscheinlich zu arbeiten auf einer little-endian-Maschine und
BitConverter.GetBytes()
geben Sie diebyte[]
Umgekehrt. So könnte man versuchen:Für den code, der die meisten tragbar, aber Sie können es so machen:
InformationsquelleAutor der Antwort paracycle
Hier ist ein weiterer Weg, es zu tun: wie wir alle wissen, 1x byte = 8x bits und auch eine "normale" integer (int32) enthält 32 bits (4 bytes). Wir können die >> operator shift bits rechts (>> operator ändert nicht Wert.)
InformationsquelleAutor der Antwort Maciek
BitConverter.GetBytes(int)
fast tut, was Sie will, außer die endianness ist falsch.Können Sie die IP-Adresse.HostToNetwork Methode zum vertauschen von bytes, die in den integer-Wert vor der Verwendung
BitConverter.GetBytes
oder verwenden Jon Skeet ist EndianBitConverter Klasse. Beide Methoden tun das richtige(tm) in Bezug auf Portabilität.InformationsquelleAutor der Antwort dtb
Wenn ich mir diese Beschreibung habe ich das Gefühl, dass diese xdr integer ist nur ein big-endian "standard" integer, aber es ist ausgedrückt in den meisten verschleierte Art und Weise. Zweierkomplement-notation ist besser bekannt als U2, und es ist, was wir mit heutigen Prozessoren. Die byte-Reihenfolge gibt an, dass es ein big-endian notation.
Also, um deine Frage zu beantworten, sollten Sie die inversen Elemente in Ihrem array (0 <--> 3, 1 <-->2), wie Sie codiert werden, die in little-endian. Nur um sicherzugehen, sollten Sie zunächst überprüfen
BitConverter.IsLittleEndian
zu sehen, auf welchen Maschinen Sie ausgeführt werden.InformationsquelleAutor der Antwort Marcin Deptuła
Wenn Sie mehr Allgemeine Informationen über die verschiedenen Methoden zur Darstellung von Zahlenwerten, einschließlich Zweierkomplement haben einen Blick auf:
Zweierkomplement und Unterzeichnet Zahlendarstellung auf Wikipedia
InformationsquelleAutor der Antwort Eric J.
Warum dieser code in den Beispielen oben...
Einen struct mit expliziten layout wirkt in beide Richtungen und hat keine Leistungseinbußen.
Update: Da gibt es eine Frage, wie man mit endianness ich fügte hinzu, eine Schnittstelle, die zeigt, wie Abstrakt. Eine andere Implementierung struct kann sich mit den entgegengesetzten Fall,
InformationsquelleAutor der Antwort Sten Petrov
InformationsquelleAutor der Antwort Valery Rode