将二进制文件读取(fread)代码从 MATLAB 转换为 C#
Posted
技术标签:
【中文标题】将二进制文件读取(fread)代码从 MATLAB 转换为 C#【英文标题】:Converting binary file reading (fread) code from MATLAB to C# 【发布时间】:2019-12-03 05:35:19 【问题描述】:我需要在 C# 中重现我找到的读取二进制文件的 MATLAB 代码。代码是:
% Skip header
fread(fid, 1, 'int32=>double', 0, 'b');
% Read one property at the time
i = 0;
while ~feof(fid)
i = i + 1;
% Read field name (keyword) and array size
keyword = deblank(fread(fid, 8, 'uint8=>char')');
keyword = strrep(keyword, '+', '_');
num = fread(fid, 1, 'int32=>double', 0, 'b');
% Read and interpret data type
dtype = fread(fid, 4, 'uint8=>char')';
End
fclose(fid)
我尝试了几种在 C# 中读取二进制文件的方法,但都没有得到正确的结果。我应该如何进行?
这就是我所做的,到目前为止似乎有点工作
FileStream fs = new FileStream(filename, FileMode.Open);
BinaryReader binreader = new BinaryReader(fs,Encoding.Default);
//skip head
binreader.ReadInt32();
for (int i = 0; i < 8; i++)
keyword = keyword + binreader.ReadChar();
keyword = keyword.TrimEnd();
keyword = keyword.Replace("+", "_");
num = binreader.ReadInt32();
for (int i = 0; i < 4; i++)
dtype = dtype + binreader.ReadChar();
问题是我应该得到:keyword=INTERHEAD, num=411 and dtype=INTE 但我得到的是:keyword=INTERHEAD, num=-1694433280 and dtype=INTE 问题在于正确获取 num 变量。
我已将 readint32 更改为 readdouble、readUint32 等,但从未得到 411。
有什么帮助吗?
【问题讨论】:
这听起来像是 C# 中非常常见的操作。你应该展示你在 C# 中的尝试,并解释为什么你认为结果是错误的。如果可能,请上传/链接这种类型的小型二进制文件并显示预期结果。如果不执行上述任何操作,您的问题根本无法重现,听起来像是代码请求。 您是否尝试过文档? BinaryReader Class,尤其是方法:ReadChars 和 ReadInt32 【参考方案1】:这可能是在num
部分读取/接收错误字节序的问题吗?
【讨论】:
以上是关于将二进制文件读取(fread)代码从 MATLAB 转换为 C#的主要内容,如果未能解决你的问题,请参考以下文章
matlab 打开bin文件 并转换成为txt文件,送上所有积分
matlab 的fread函数,[a,count]=fread(fid,size,precision,skip),skip参数的作用是啥?