在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