shp系列(二)——利用C++进行shp文件的读(打开)

1.各数据类型及其字节数

BYTE 1;       char 1;    short 2;      int 4;    double 8;

2.位序big和little及其转换

对于位序是big的数据我们在读取时要小心。通常,数据的位序都是Little,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。一个位序为big的数据,如果我们想得到它的真实数值,需要将它的位序转换成Little即可。转换原理就是交换字节顺序,下面是转换代码(big->little):

int OnChangeByteOrder(int indata) { char ss[9]; char ee[8]; unsigned long val = unsigned long(indata); ultoa(val, ss, 16);// 将十六进制的数(val)转到一个字符串(ss)中,itoa(val,ss,16); int i; int length = strlen(ss); if (length != 8){ for (i = 0; i<8 - length; i++) ee[i] = '0'; for (i = 0; i<length; i++) ee[i + 8 - length] = ss[i]; for (i = 0; i<8; i++) ss[i] = ee[i]; } //****** 进行倒序 int t; t = ss[0]; ss[0] = ss[6]; ss[6] = t; t = ss[1]; ss[1] = ss[7]; ss[7] = t; t = ss[2]; ss[2] = ss[4]; ss[4] = t; t = ss[3]; ss[3] = ss[5]; ss[5] = t; //****** 将存有十六进制数 (val) 的字符串 (ss) 中的十六进制数转成十进制数 int value = 0; for (i = 0; i<8; i++){ int k; if (ss[i] == 'a' || ss[i] == 'b' || ss[i] == 'c' || ss[i] == 'd' || ss[i] == 'e' || ss[i] == 'f') k = 10 + ss[i] - 'a'; else k = ss[i] - '0'; value = value + int(k*(int)pow((DOUBLE)16, 7 - i)); } return(value); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfxx.html