Прочитать бинарный файл, с условием, что порядок записи байтов может быть разным - C#
Формулировка задачи:
Здравствуйте. Подскажите, пожалуйста. Я в C# новичок.
Проблема такая:
мне нужно прочитать бинарный файл, но порядок записи байтов может быть разным (от младшего к старшему и наоборот). Допустим есть блок в 200 байт, в нем на определенных местах хранятся числа (либо Int16, либо Int32). Я читаю целиком блок в массив типа byte[200]. Затем с помощью BitConverter.ToInt16 (или ToInt32) беру нужные мне значения. Но этот BitConverter по умолчанию считает, что порядок байтов от младшего к старшему, а мне нужно наоборот. Как это поменять?
Я нашел вот такую штуку, можно вроде как присваивать значения false или true, но мне выдает ошибку:
typeof (BitConverter).GetRuntimeField("IsLittleEndian").SetValue(null, false);
'System.Type' does not contain a definition for 'GetRuntimeField' and no extension method 'GetRuntimeField' accepting a first argument of type 'System.Type' could be found (are you missing a using directive or an assembly reference?)
Решение задачи: «Прочитать бинарный файл, с условием, что порядок записи байтов может быть разным»
textual
Листинг программы
byte[] original = { 0x30, 0x39, 0x1A, 0x85 }; // 12345, 6789
// слева - направо
byte[] bytes = (byte[])original.Clone();
for (int i = 0; i < bytes.Length; i += sizeof(Int16))
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes, i, sizeof(Int16));
Int16 value = BitConverter.ToInt16(bytes, i);
Console.WriteLine(value);
}
// справа - налево
bytes = (byte[])original.Clone();
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
for (int i = 0; i < bytes.Length; i += sizeof(Int16))
{
int position = BitConverter.IsLittleEndian ? bytes.Length - i - sizeof(Int16) : i;
Int16 value = BitConverter.ToInt16(bytes, position);
Console.WriteLine(value);
}