什么是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')
所以我尝试将这样的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++的标准,你当然应该使用它。
但是,fread
和fclose
是标准的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。
编辑:修正了第二次转换时的大小
相关文章:
- 对fread的返回值感到困惑
- 这个 matlab 代码的C++等价物是什么(fread matlab vs fread C/C++)?
- 我如何使用ifstream使用以下类似fread()的语句?
- Fread C++ in C#.我知道我需要字节缓冲区,但并不完全在那里
- 奇怪的内存消耗 C fread / C++ 读取函数,基于 Linux sysinfo 数据
- 在C++中使用 fread() 来解释这个结果是什么?
- 我应该如何看待 fread() 的参数?
- 在C++中使用 fread 从二进制文件中读取字符串及其长度
- 知道 fscanf 中参数的大小(fp , "%s" , strr1)
- Fread 会丢失二进制数据
- Fread 是向后存储二进制
- 功能"fread()"不读取特定文件类型?
- 当调用FREAD()函数时,文件指针如何移动
- 'fopen'返回格式错误的'fp'
- 如何将文件描述符 (int fd) 转换为文件指针 ( 文件* fp )
- 使用FP:快速导致错误的VC 结果(不仅仅是不准确)结果 - 这是编译器错误
- Is $fp == $rbp in gdb?
- 如何正确地 fread() 和 fwrite() 一个非文本文件?
- 在构造函数[C ]中的FP分配上崩溃
- 什么是C++翻译 Matlabs 'fread(fp, 1, 'int32')' 和 fread(fp, n, 'uchar')