2016-02-23 3 views
0

Я пытаюсь прочитать двоичный файл (.bin) и преобразовать ресурсы файла в матрицу. Код, который я использую для получения файла, находится здесь.C#: Преобразование двоичной матрицы в axb

using (BinaryReader Reader = new BinaryReader(File.Open(string.Format("{0}{1}.bin", DefaultFilePath, "MyBinaryFile"), FileMode.Open))) 
{ 
    //the code to convert binary to AxB matrix here. 
    byteArray = Reader.ReadBytes(100000); 
    float myFloat = System.BitConverter.ToSingle(byteArray, 0); 
} 

Мне нужно написать фрагмент кода, который может преобразовывать ресурсы двоичного файла в матрицу AxB. Из приведенного выше кода вы можете видеть, что я конвертирую двоичный файл в Byte [], а затем плаваю, но я застрял здесь.

В Matlab вы можете легко прочитать файл .bin и получить массив AxB, например, в этом link.

Как я могу продолжить?

+0

'.bin' - не определенный формат файла - в каком формате находится этот файл? –

+0

@MattiVirkkunen это двоичный файл [link] (http://stackoverflow.com/tags/binaryfiles/info) –

+0

Если вы прочтете только что опубликованную ссылку, вы бы знали, что зная, что это «это двоичный файл», не дает вам никакой информации о том, что он содержит, и в каком формате. Как правило, гораздо сложнее угадать формат двоичного файла, чем текстовые файлы. –

ответ

0

Если файл представляет собой только длинный список 32-битных поплавков, вы уже получили первый преобразователь значений правильно. Теперь вам просто нужно сделать остаток, добавив цикл и увеличивая второй аргумент для ToSingle на 4 каждый раз.

Или, поскольку вы уже используете BinaryReader, вы можете просто использовать его метод ReadSingle в цикле. Если вам нужна двумерная матрица, использование многомерного массива может быть хорошей идеей.

// In reality you might want to figure out the array size based on the file size 
float[,] floatArray = new float[5000, 32]; 

using (BinaryReader reader = new BinaryReader(File.Open(string.Format("{0}{1}.bin", DefaultFilePath, "MyBinaryFile"), FileMode.Open))) 
{ 
    for (x = 0; x < floatArray.GetLength(0); x++) 
    { 
     for (y = 0; y < floatArray.GetLength(1); y++) 
      floatArray[x, y] = reader.ReadSingle(); 
    } 
} 

Примечание: вам может понадобиться, чтобы перевернуть все вокруг в зависимости от того, является ли строка-мажорных или столбцам файл данных и искомое представление памяти.

Также помните, что многомерные массивы смежны в памяти, поэтому, если ваш файл огромен, вы можете столкнуться с проблемами обработки.