C# Bitconverter -Probleme
-
27-10-2019 - |
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?
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);
}