最近项目涉及发送消息到前台,涉及不同的硬件平台和操作系统,发现需要考虑字节序的问题。字节序怎么成了问题的呢?什么是字节序呢?
简单来说,字节序就是字节在内存中顺序,而不同的处理器,存放字节的顺序习惯不同,呵呵。分为大字节序和小字节序,大字节序讲高位字节存放在内存低处,而低位字节存放在内存高处。小字节序则相反。
那么,高位字节是什么样的?低位字节又是什么样的?距离来说12345678这个数字,1是最高位字节,而7是最低位字节。而内存高低怎么来确定呢?一个byte数组,索引低的在内存低处,而索引高的在内存高处。{12,34,56,78}这个byte数组的话,1是内存低处,而7是内存高处。
根据以上的介绍,我们可以很容易看出,数字在内存中的存放规则,1234567这个数字,如果是大字节序,存放是:{12,34,56,78},而如果是小字节序,则是{78,56,34,12}
实际编码需要考虑不同的字节序,避免数据解析错误。当然,这种错误只有在多字节的数值中才有问题,如int,long,float,double等。单字节的字符不存在这些问题。
需要附加说明的是,网络字节序,都是大字节序。