字节序的问题
来源:互联网 发布:网络招商好做吗 编辑:程序博客网 时间:2024/05/16 05:32
最近读shape文件,文档指出了大字节序(big endian)和小字节序(little endian) 。搜索引擎告诉我,这个东西原意是鸡蛋的大小两头,在计算机里是内存中是高低字节的排列方式而已;同时,又引出了有的机器是9位、12位等等为一字节的,这个我不想说了,对我完全没有意义。
其实,只要明白两个问题就行了:
1、vc++中,是小字节序的,一个字节8位,char 为一个字节,int为4个字节
2、大小转换的方法:
我有两个办法,一个是位移,一个使用memcpy其实很简单。
CFile file;
CFileException e;
if(file.Open("d://sss.shp",CFile::typeBinary | CFile::modeRead ,&e))
{
char charBuffer[4];
int a;
file.Read(charBuffer,4);
// char charBuffer1[4];
file.Seek(0,0);
//高低位交换的两种方法
// 方法1:位移
file.Read(&a,4);
int b1=0,b2=0,b3=0,b4=0;四个数每位都为0
int一共32位,先得到最后八位(b1),然后得到倒数第二个八位(b2)·······
把四个数相与即可
b1=a>>24;
b2=a>>16;
b2=b2<<24;
b2=b2>>16;
b3=a>>8;
b3=b3<<24;
b3=b3>>8;
b4=a<<24;
a=b1|b2|b3|b4;
//方法2:用char类型交换
/*
int b=0;
int c=0;
c=a>>24&(~(~b<<24));
memcpy(charBuffer,&a,4);
for(int i=0;i<2;i++)
{
char j;
j=charBuffer[i];
charBuffer[i]=charBuffer[3-i];
charBuffer[3-i]=j;
}
memcpy(&a,charBuffer,4);*/
TRACE("%d",a);
}
例子中打开的是一个shape文件,可以到网上找或者用esri 的 arcmap导出来一个。
位移的方法其实很简单,也就是大学时学谭浩强的c语言书上的位移举例一章的内容了。第二种方法其实更简单,
把一个整数截成4段(4个字节吗)放到四个cha中,然后倒个顺序,再拷回去,完事。劈开和合并时c++只能用memcpy函数了。
上面两种方法,据说位移更快些,快多少呢?我不知道了
至于牛人们还有用汇编的可能更简单些,不过我不会!
顺便提一句,谭浩强的c语言书是考二级用的!二级是某些城市进城要户口的最低标准,汗!
- 字节序的问题
- 字节序的问题
- 字节序的问题
- 关于字节序的问题
- 计算机的字节序问题
- 关于字节序的问题
- 网络字节序的问题
- 大小字节序的问题
- 网络字节序的问题
- PowerPC的字节序问题
- PowerPC的字节序问题
- 网络字节序问题的思考
- 字节序问题:大小端的判定
- 字节序的大小端问题
- 字节对齐的问题
- 字节对齐的问题
- 字节对齐的问题
- 字节对齐的问题
- [电影]东京审判之后--中日不友好又如何?
- 流氓软件及反流氓软件的技术分析
- 手机网站大全
- 学到大三了,有点感想
- 配置MOSS2007beta2的单机开发环境(下)
- 字节序的问题
- 在号码池取连续号码的算法
- 稍微总结一下
- 明天.多核
- (转)XNA教程(三)—— sprite绘制效率
- SQL Server优化的方法
- Rss介绍
- Tech : mysql在jboss 的配置.txt
- Delphi中串行通信的实现