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

时间:2013-12-27 21:40:43

标签: 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];       
        }
    }

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

0)在顶部

#include&lt; stdio.h&gt;

1)删除内联声明并将它们移到main(){

之后的顶部

2)删除using namespace

3)将ifstream替换为

FILE* file = fopen("N49E013.hgt", "rb");

4)用

替换file.read ...
fread(buffer, 2, 1, file);

5)用

替换cout ...
printf("Error reading file\n");

6)在循环之后,添加

fclose(file);

答案 2 :(得分:0)

C代码非常相似,你只需要使用stdio.h的fopen和fread。

请参阅此示例:http://www.codingunit.com/c-tutorial-binary-file-io