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