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

What is C++ translation for Matlabs `fread(fp, 1, 'int32')` and fread(fp, n, 'uchar')

本文关键字:fp fread uchar int32 Matlabs 翻译 C++ 什么      更新时间:2023-10-16

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

std::fstream是访问文件的c++标准(除了标准库之外没有其他库)。它提供operator>>,这可能是你正在寻找。

如果您真的想要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);
    ...
}

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

但是,freadfclose是标准的C函数,因此可以在c++中使用

read在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);

如果你需要读取和解析文本表示的数字,你可以在C/IO函数中使用fscanf。

编辑:

修正了第二次转换时的大小