Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++/Matlab中的C#_Matlab - Fatal编程技术网

从C++/Matlab中的C#

从C++/Matlab中的C#,matlab,Matlab,我知道在C#中创建的文件的binarywriter()结构,我想在MATLAB中读取/导入该文件。不幸的是,我已经尝试了所有可用的方法(fopen/fread、textscan等),但我无法阅读。有人能帮我吗 预先感谢 < P>我发现在MATLAB中解码二进制文件比较慢,所以你可能想考虑把你的数据作为C语言的CSV文件输出,但是,这就是我如何解码你的文件: f = fopen(filename); data = fread(f,inf,'*uint8'); fclose(f); data_si

我知道在C#中创建的文件的binarywriter()结构,我想在MATLAB中读取/导入该文件。不幸的是,我已经尝试了所有可用的方法(fopen/fread、textscan等),但我无法阅读。有人能帮我吗


预先感谢

< P>我发现在MATLAB中解码二进制文件比较慢,所以你可能想考虑把你的数据作为C语言的CSV文件输出,但是,这就是我如何解码你的文件:

f = fopen(filename);
data = fread(f,inf,'*uint8');
fclose(f);

data_size = size(data,1);
index = 1;
byte = 1;

while byte < data_size
   decoded_data(index).val1 = typecast(data(byte:byte+1), 'uint16');
   byte = byte + 2;

   decoded_data(index).val2 = typecast(data(byte:byte+3), 'uint32');
   byte = byte + 4;

   decoded_data(index).val3 = typecast(data(byte:byte+7), 'double');
   byte = byte + 8;

   index = index + 1;
end
如果您不习惯在Matlab中使用数据类型,那么在中可能会有点痛苦(许多函数只适用于双精度函数)。因此,您可以在所有类型转换周围环绕一个转换,如下所示:

decoded_data = double(typecast(data, 'double'));
编辑:

根据评论中的更新信息,我提出了以下解决方案。它假定字符串始终是固定长度的。我没有做太多的错误检查,但是如果没有找到最后一个字符串,就会抛出一个错误

filename = 'v1.hrv';
f = fopen(filename);
data = fread(f,inf,'*uint8');
fclose(f);

byte = 1;

decoded_data.name = char(data(byte+1:byte+23))';
byte = byte + 25;

decoded_data.version = char(data(byte:byte+14))';
byte = byte + 16;

decoded_data.patient_id = char(data(byte:byte+3))';
byte = byte + 5;

decoded_data.study = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.gender = char(data(byte));
byte = byte + 2;

decoded_data.string1 = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.sample_frequency = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.string2 = char(data(byte:byte+3))';
byte = byte + 4;

decoded_data.data_length = typecast(data(byte:byte+7), 'int64');
byte = byte + 8;

number_of_data_bytes = decoded_data.data_length * 4;
decoded_data.data = typecast(data(byte:byte+number_of_data_bytes-1), 'single');
byte = byte + number_of_data_bytes + 1;

if ~strcmp('Sample finished', char(data(byte:byte+14))')
   error('File not decoded correctly')
end

你能再详细一点吗?当您尝试读取这些文件时会发生什么情况?你有错误吗?@MZimmerman6请看下面的评论。首先,谢谢你抽出时间回答我的问题。我的问题是,当我尝试这样做时,“data=fread(f,inf,“*uint8”);“”返回空值,因此数据为空…这是结构:bw=New BinaryWriter(myStream)bw.Write(“我的公司ECG”)//string bw.Write(“版本1.0.0”)//string bw.Write(“1001”)'string–患者ID//string bw.Write(“001”)'string–研究ID//string bw.Write(“1”)Integer–性别:0男,1女//string bw.Write(“ECG”)//string bw.Write(“500”)//string bw.Write(“测试”)//string bw.Write(datas_length)//long或int64 For i,只要long=0到datas_length-1 bw.Write(ChannelData(i))//float Next bw.Write(“示例完成”)//string bw.Close()没有问题。希望我们能找到问题的根源
fopen
fread
非常简单,我很难想象出哪里出了问题,所以也许值得检查一下基础知识?您能检查文件是否正确打开(
f
应该有一个值>=3)?你能检查你打开的文件是否大于0字节吗?如果你使用
data=fread(f),你会得到任何数据吗?如果你将二进制文件的副本上传到某个地方,我会在这里试一试。是的,我可以读取该文件,但它不是我想要的顺序。我做错了什么事。我试着按照我之前发布的结构。文件在这里@sclarke81。您的代码似乎工作正常,但由于增量错误处理而弹出错误“下标索引必须是实正整数或逻辑。测试(第11行)中的错误解码了_数据(索引)。name=char(数据(字节+1:字节+23))”;”。我只想提取存储在此hrv文件中的数据,以便对其进行处理@sclarke81
filename = 'v1.hrv';
f = fopen(filename);
data = fread(f,inf,'*uint8');
fclose(f);

byte = 1;

decoded_data.name = char(data(byte+1:byte+23))';
byte = byte + 25;

decoded_data.version = char(data(byte:byte+14))';
byte = byte + 16;

decoded_data.patient_id = char(data(byte:byte+3))';
byte = byte + 5;

decoded_data.study = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.gender = char(data(byte));
byte = byte + 2;

decoded_data.string1 = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.sample_frequency = char(data(byte:byte+2))';
byte = byte + 4;

decoded_data.string2 = char(data(byte:byte+3))';
byte = byte + 4;

decoded_data.data_length = typecast(data(byte:byte+7), 'int64');
byte = byte + 8;

number_of_data_bytes = decoded_data.data_length * 4;
decoded_data.data = typecast(data(byte:byte+number_of_data_bytes-1), 'single');
byte = byte + number_of_data_bytes + 1;

if ~strcmp('Sample finished', char(data(byte:byte+14))')
   error('File not decoded correctly')
end