Прочитать бинарный файл, с условием, что порядок записи байтов может быть разным - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д