我正在尝试使用来自".hgt“格式化文件的二进制数据的应用程序。我在C++中找到了一个孤子,但我不知道如何将该解决方案转换为C。文件中的每个值都是有符号的短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];
}
}发布于 2013-12-27 21:47:20
主要而言,只需将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);
}发布于 2013-12-27 21:51:48
0)在顶部
#包括
1)删除内联声明,并在main(){
2)删除使用的命名空间
3)替换如果流..。使用
FILE* file = fopen("N49E013.hgt", "rb");( 4)替换file.read.使用
fread(buffer, 2, 1, file);5)替换cout ..。使用
printf("Error reading file\n");6)在循环的}后面,添加
fclose(file);发布于 2013-12-27 21:49:32
C代码非常类似,您只需使用stdio.h的fopen和fread即可。
参见本例:http://www.codingunit.com/c-tutorial-binary-file-io
https://stackoverflow.com/questions/20808201
复制相似问题