我有一个浮点数组:
float[] samples32array
我需要将其转换为二进制文件,以便我可以在matlab中读取它。
有办法吗?
很简单。首先,您应该使用FileStream
并创建一个文件。然后,您可以使用BinaryWriter
,它可以将任何c#数据类型写入底层流,例如FileStream
。
using (FileStream file = File.Create(path))
{
using (BinaryWriter writer = new BinaryWriter(file))
{
foreach (float value in samples32array)
{
writer.Write(value);
}
}
}
由于BinaryWriter
的构造函数接受基本类型Stream
,因此可以使用任何流类型。它适用于文件流以及NetworkStream
或MemoryStream
等。这是一个非常通用的类。
并且请避免事先将float[]
转换为byte[]
,因为它会分配内存,如果您的数组很大(不知道是否适合您),这是不好的。
您可以使用BinaryWriter
非常容易地将数据写入文件:
foreach (var value in samples32array)
{
writer.Write(value);
}
现在BinaryWriter
保证使用小端格式,因此在Matlab调用中,您应该指定l
的machinefmt
值以显式地以小端格式读取它。
这个答案显示了一种将浮点数数组转换为字节数组的方法。然后可以使用file. writeallbytes()方法将其写入文件。但是,MatLab如何读取它将是一个问题。
我找到了一些MatLab的fread
命令文档。看起来它有一些参数可以让你定义读取的精度。您可以使用"float"作为精度值。虽然,这是一个有根据的猜测,因为我不是很熟悉MatLab。