我正在尝试将一个读取hgt文件的matlab代码翻译成c ++,我就是这个resource。但是,不是按列和行读取文件,而是想知道是否有任何方法可以使用fread来更快地获得所需的值。 matlab代码如下所示:
% ilat and ilon, both vectors, already calculated
% Calculate the offset to each point
offset = ilon*nbytes_per_lon + ilat*2;
% Read the database
path_data = zeros(size(path_lon));
for i = 1:length(path_lon);
status = fseek(fid, offset(i), 'bof');
path_data(i)=fread(fid,[1],'integer*2');
end
我的c ++代码如下所示:
for (i = 0; i < path_lon.size(); i++) {
offset[i] = ilon[i] * nbytes_per_lon + ilat[i] * 2;
fseek(pFile, offset[i], SEEK_SET); // SEEK_SET == bof
path_data[i] = fread(buffer, 2, 1, pFile);
}
我遇到转换失败的部分是fread部分,在c ++方面它只给了我所有的1。我已经阅读了关于fread的matlab和c ++文档,但似乎无法正确翻译。任何帮助将不胜感激,谢谢!
编辑:我已经离开了直接翻译,而是尝试使用链接资源迭代hgt文件并获取我想要的值。这是我的测试代码:std::ifstream::pos_type size = 2;
char* memblock = new char[size];
if(!file) {
std::cout << "Error opening file!" << std::endl;
return -1;
}
for (int i = 0; i < SRTM_SIZE; i++) {
for (int j = 0; j < SRTM_SIZE; j++) {
height[i][j] = (memblock[0] << 8) | memblock[1];
}
}
file.seekg(0, std::ios::beg);
file.read(memblock, size);
std::cout << "height at [5][5]: " << height[5][5] << std::endl;
std::cout << "height at [10][10]: " << height[10][10] << std::endl;
我遇到的问题是身高[5] [5]和身高[10] [10]都给了我相同的值(0)。我做错了什么?