Frage

Normal, wenn Sie beispielsweise 5 in Byte -Array darstellen möchten, wird es wie {0x00,0x00,0x00,0x05} sein, aber Bitconverter gibt mir umgekehrtes Array ({0x05,0x00,0x00,0x00}) Warum es so ist und wo ich 'ist. Ich liege falsch?

War es hilfreich?

Lösung

Die Wahrscheinlichkeit besteht darin, dass Sie sich in einer Architektur in Little Endian befinden (was für die gemeinsamen X86- und X86-64-Architekturen der Fall ist). Sie können dies mit dem überprüfen BitConverter.IsLittleEndian Eigentum. Auf einer solchen Architektur die am wenigsten von Bedeutung Byte kommt zuerst, was erklärt warum

BitConverter.GetBytes(5)

produziert

{ 0x05, 0x00, 0x00, 0x00 }

Sie können das Array natürlich basierend auf der System/Ziel -Endianess umkehren. Sie können einen solchen finden EndianBitConverter aufgelistet hier.

Andere Tipps

Ich habe die folgenden Wrapper -Klassen geschrieben, um den Fall des BitConverter erwarten wenig Ende.

    public static Int16 ToInt16(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt16(data, offset);
    }

    public static Int32 ToInt32(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt32(data, offset);
    }

    public static Int64 ToInt64(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt64(data, offset);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top