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

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


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

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

10   голосов , оценка 4.1 из 5
Похожие ответы