在C中读取二进制(.hgt)文件(将代码从C++迁移到C)

Pet*_*mek 3 c c++

我正在尝试使用来自".hgt"格式文件的二进制数据的应用程序.我在C++中找到了一个解决方案,但是我无法弄清楚如何将该解决方案转换为C.文件中的每个值都是带符号的short int类型,并且有1201x1201的值.

const int SIZE = 1201;
signed short int matrix[SIZE][SIZE] = {0};

int main(int argc, const char * argv[])
{
    using namespace std;

    ifstream file("N49E013.hgt", ios::in|ios::binary);    

    unsigned char buffer[2];
    for (int i = 0; i < SIZE; ++i)
    {
        for (int j = 0; j < SIZE; ++j) 
        {
            if(!file.read( reinterpret_cast<char*>(buffer), sizeof(buffer) ))
            {
                cout << "Error reading file!" << endl;
                system("PAUSE");
                return -1;
            }
            matrix[i][j] = (buffer[0] << 8) | buffer[1];       
        }
    }
Run Code Online (Sandbox Code Playgroud)

Car*_*ory 7

主要是,您只需要替换函数的std方法stdio.h,如下所示:

#include <stdio.h>

#define SIZE 1201
signed short int matrix[SIZE][SIZE] = {0};

int main(int argc, const char * argv[])
{
    FILE *fp = fopen("N49E013.hgt", "rb");    

    unsigned char buffer[2];
    for (int i = 0; i < SIZE; ++i)
    {
        for (int j = 0; j < SIZE; ++j) 
        {
            if (fread(buffer, sizeof(buffer), 1, fp) != 1)
            {
                printf("Error reading file!\n");
                system("PAUSE");
                return -1;
            }
            matrix[i][j] = (buffer[0] << 8) | buffer[1];       
        }
    }

    fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,检查`fread()`成功的正确方法是`fread(buffer,sizeof(buffer),1,fp)<1`. (2认同)