所以我尝试将这样的Matlab代码转换为C ++:
ss = 'file.mask'
fp = fopen(ss, 'rb');
sx = fread(fp, 1, 'int32')
sy = fread(fp, 1, 'int32')
mask = zeros(sy, sx);
mm = mask(100, 100:200);
count = zeros(10, 1);
for i = 1:sy
row = fread(fp, sx, 'uchar');
for j = 1:sx
for k = 1:10
if row(j) == k - 1
count(k) = count(k) + 1;
end
end
end
mask(i, :) = row;
end
fclose(fp);
所以我想知道什么是Matlab fread
的C ++模拟?
答案 0 :(得分:2)
std::fstream
是访问文件的C ++标准(没有其他库而不是标准库)。它提供operator>>
,这可能就是你要找的东西。
答案 1 :(得分:1)
std::fstream
是c ++中的标准,这当然是你应该使用的。
但是,fread
和fclose
是标准的C函数,因此可以在C ++中使用。
答案 2 :(得分:1)
如果你真的想要C ++模拟而不是C模拟(甚至是C / C ++模拟),那么你应该使用std::ifstream
:
std::ifstream in("file.mask", std::ios_base::in | std::ios_base::binary);
int sx, sy;
in.read(reinterpret_cast<char*>(&sx), sizeof(int));
in.read(reinterpret_cast<char*>(&sy), sizeof(int));
std::vector<unsigned char> row(sx);
for(...)
{
...
in.read(reinterpret_cast<char*>(&row[0]), sx);
...
}
答案 3 :(得分:0)
fread存在于C中,这在C ++中并不常用。但是,如果您想要一些非常接近的东西,您可以执行以下操作。
sx=fread(fp, 1, 'int32') is
int sx;
fread(&sx, sizeof(int), 1, fp);
row = fread(fp, sx, 'uchar'); is
unsigned char row;
fread(&row, sizeof(unsigned char), sx, fp);
如果需要读取和解析文本表示的数字,可以将fscanf与C IO函数一起使用。
编辑:
修正了第二次转换中的尺寸。