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);
}
3.shp文件的基本构成
shp文件,由于包含最主要的数据坐标数据,也叫主文件、坐标文件,由文件头和实体信息构成: