Прочитать бинарный файл, с условием, что порядок записи байтов может быть разным - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Подскажите, пожалуйста. Я в C# новичок. Проблема такая: мне нужно прочитать бинарный файл, но порядок записи байтов может быть разным (от младшего к старшему и наоборот). Допустим есть блок в 200 байт, в нем на определенных местах хранятся числа (либо Int16, либо Int32). Я читаю целиком блок в массив типа byte[200]. Затем с помощью BitConverter.ToInt16 (или ToInt32) беру нужные мне значения. Но этот BitConverter по умолчанию считает, что порядок байтов от младшего к старшему, а мне нужно наоборот. Как это поменять? Я нашел вот такую штуку, можно вроде как присваивать значения false или true, но мне выдает ошибку:
Листинг программы
  1. 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
Листинг программы
  1. byte[] original = { 0x30, 0x39, 0x1A, 0x85 }; // 12345, 6789
  2.            
  3. // слева - направо
  4. byte[] bytes = (byte[])original.Clone();
  5. for (int i = 0; i < bytes.Length; i += sizeof(Int16))
  6. {
  7.     if (BitConverter.IsLittleEndian)
  8.         Array.Reverse(bytes, i, sizeof(Int16));
  9.  
  10.     Int16 value = BitConverter.ToInt16(bytes, i);
  11.     Console.WriteLine(value);
  12. }
  13.  
  14. // справа - налево
  15. bytes = (byte[])original.Clone();
  16. if (BitConverter.IsLittleEndian)
  17.     Array.Reverse(bytes);
  18.  
  19. for (int i = 0; i < bytes.Length; i += sizeof(Int16))
  20. {
  21.     int position = BitConverter.IsLittleEndian ? bytes.Length - i - sizeof(Int16) : i;
  22.     Int16 value = BitConverter.ToInt16(bytes, position);
  23.     Console.WriteLine(value);
  24. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы