c语言-DEM二进制文件读写

c语言-DEM二进制文件读写

网上的好多程序都太复杂了,查来查去都和结构体读写有关系。

目标:通过编程实现一种简单的.dat格式,二进制存储(写)、二进制读取(读)文件的程序,文件保存的是地理信息的DEM融合数据。

优势:数据写到文件效率最高的方法是用二进制形式写入。二进制输出避免了再数值转换字符串过程中涉及的开销和精度损失。但是二进制数据并非人眼所能阅读。

环境

  • Windows 10
  • Visual studio 2017

代码要点

  • C语言-二进制文件读写流,fopen-fwrite-fclose,fopen-fread-fclose;
  • C语言数据格式、占用内存长度;
  • 数组长度(总长度)的计算;

参考代码

/**DEM_Result.dat File Reader*/

/**by Dr.Zheng*/

/**libs*/
# include<stdio.h>
# include<stdlib.h>

/**File Pointers*/
FILE *fpin, *fpout;

void main(void)
{

	int ch, i, ch1, data[100], data_out[100] = { 0 };

	/**New a dataset*/
	/*sizeof可以获得数据类型或变量在内存中所占的字节数,也可以获得整个数组在内存中所占的字节数*/
	for (i = 0; i < sizeof(data)/sizeof(int); i++)
	{
		data[i] = i;
	}

	/* When use "fopen_s " the errno_t type is necessary*/
	errno_t err;

	/* Open for read (will fail if file "data" does not exist) */
	if ((err = fopen_s(&fpin, "DEM_ResultSaveTest.dat", "wb")) != NULL)
		exit(0);

	/*写二进制文件fwrite save data in binary format*/
	//fwrite(&data[0], sizeof(int), 1, fpin);
	for (int k = 0; k < sizeof(data)/sizeof(int); k++)
	{
		if (fwrite(&data[k], sizeof(int), 1, fpin) != 1)
		{
			printf("file write error!\n");
		}
	}

	/* Close fpin */
	if (fpin)
	{
		if (fclose(fpin))
			printf("The file 'DEM_ResultSaveTest.dat' was not closed\n");
	}
	printf("The file 'DEM_ResultSaveTest.dat' was closed\n");

	/*读二进制文件*/
	/* Open for read (will fail if file "data" does not exist) */
	if ((err = fopen_s(&fpout, "DEM_ResultSaveTest.dat", "rb")) != NULL)
		exit(0);
	/*fwrite save data in binary format*/
	for (int j = 0; j < 100; j++)
	{
		fread(&data_out[j], sizeof(int), 1, fpout);
	}

	/* Close fpin */
	if (fpout)
	{
		if (fclose(fpout))
			printf("The file 'DEM_ResultSaveTest.dat' was not closed\n");
	}
	printf("The file 'DEM_ResultSaveTest.dat' was closed\n");

	system("pause");
}

结果验证

在system(‘pause’)设置断点,然后以调试模式运行程序,查看局部变量,如下图所示,data为写入数据,data_out为读入数据,两者一致。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DEM(Digital Elevation Model)文件通常是一种二进制文件,它包含了地形高度信息。读取DEM文件的方法取决于DEM文件的格式。以下是一些常见的DEM文件格式及其读取方法: 1. USGS DEM格式:USGS DEM文件是一种ASCII格式的DEM文件。可以使用Python中的GDAL库来读取USGS DEM文件。例如,以下代码可以读取USGS DEM文件中的高程数据: ``` from osgeo import gdal dem_file = 'path/to/dem/file' ds = gdal.Open(dem_file) band = ds.GetRasterBand(1) elevation_data = band.ReadAsArray() ``` 2. SRTM格式:SRTM(Shuttle Radar Topography Mission)是一种二进制格式的DEM文件,通常以.hgt扩展名结尾。可以使用Python中的numpy库来读取SRTM格式的DEM文件。例如,以下代码可以读取SRTM文件中的高程数据: ``` import numpy as np dem_file = 'path/to/dem/file.hgt' elevation_data = np.fromfile(dem_file, dtype='>i2').reshape((3601, 3601)) ``` 其中,'>i2'是指高位在前的16位整数,因为SRTM文件是大端字节序。 3. GeoTIFF格式:GeoTIFF是一种常见的栅格数据格式,可以包含DEM数据。可以使用Python中的GDAL库来读取GeoTIFF格式的DEM文件。例如,以下代码可以读取GeoTIFF文件中的高程数据: ``` from osgeo import gdal dem_file = 'path/to/dem/file.tif' ds = gdal.Open(dem_file) band = ds.GetRasterBand(1) elevation_data = band.ReadAsArray() ``` 无论DEM文件的格式是什么,都可以使用GDAL库来读取。当然,也可以使用其他的DEM文件读取库来读取

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值