C#:将二进制转换为axb矩阵

时间:2016-02-23 23:54:03

标签: c# matlab matrix binaryfiles

我正在尝试读取二进制文件(.bin)并将文件的资源转换为矩阵。我用来获取文件的代码在这里。

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 [],然后转换为float,但我被困在这里。

在Matlab中,您可以轻松读取.bin文件并获取此link中的AxB数组。

我该怎么办?

1 个答案:

答案 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();
    }
}

注意:您可能需要根据数据文件和所需的内存表示是行主要还是列主要来翻转。

还要记住,多维数组在内存中是连续的,所以如果你的文件很大,你可能会遇到处理它的问题。