什么是Matlabs`fread(fp,1,'int32')`和fread(fp,n,'uchar')的C ++翻译

时间:2011-10-14 10:10:00

标签: c++ matlab file-io translation fread

所以我尝试将这样的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 ++模拟?

4 个答案:

答案 0 :(得分:2)

std::fstream是访问文件的C ++标准(没有其他库而不是标准库)。它提供operator>>,这可能就是你要找的东西。

答案 1 :(得分:1)

std::fstream是c ++中的标准,这当然是你应该使用的。

但是,freadfclose是标准的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函数一起使用。

编辑:

修正了第二次转换中的尺寸。

相关问题