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

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

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(buffer), sizeof(buffer) )) { cout << "Error reading file!" << endl; system("PAUSE"); return -1; } matrix[i][j] = (buffer[0] << 8) | buffer[1]; } } 

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

 #include  #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); } 

0)在顶部

#include

1)删除内联声明并在main()之后将它们移到顶部{

2)删除using命名空间

3)替换ifstream …用

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

4)替换file.read … with

 fread(buffer, 2, 1, file); 

5)用c替换cout

 printf("Error reading file\n"); 

6)在循环之后,添加

 fclose(file); 

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

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