Matlab到C ++读取hgt文件

时间:2016-02-02 00:15:52

标签: c++ matlab

我正在尝试将一个读取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)。我做错了什么?

0 个答案:

没有答案