Что такое перевод C ++ для Matlabs `fread (fp, 1, 'int32')` и fread (fp, n, 'uchar') - PullRequest
3 голосов
/ 14 октября 2011

Поэтому я пытаюсь преобразовать такой код 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); 

И вот мне интересно, что такое C ++ аналог Matlab fread?

Ответы [ 4 ]

2 голосов
/ 14 октября 2011

std::fstream - это стандарт C ++ (без каких-либо других библиотек, кроме стандартной) доступа к файлам. Он обеспечивает operator>>, что, вероятно, то, что вы ищете.

1 голос
/ 14 октября 2011

Если вам действительно нужен аналог 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);
    ...
}
1 голос
/ 14 октября 2011

std::fstream является стандартом в C ++, и это, безусловно, то, что вы должны использовать.

Однако fread и fclose являются стандартной функцией C и, следовательно, могут использоваться в C ++.

0 голосов
/ 14 октября 2011

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.

Edit:

Исправлен размер во втором преобразовании.

...