首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >关于byte[]字节传输的大端和小端小议

关于byte[]字节传输的大端和小端小议

作者头像
Gxjun
发布2018-03-26 16:22:50
发布2018-03-26 16:22:50
2K0
举报
文章被收录于专栏:mlml

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。

字节排序按分为大端和小端,概念如下

大端(big endian):低地址存放高有效字节

小端(little endian):低字节存放地有效字节

现在主流的CPU,intel系列的是采用的little endian的格式存放数据,而motorola系列的CPU采用的是big endian,ARM则同时支持 big和little,网络编程中,TCP/IP统一采用大端方式传送数据,所以有时我们也会把大端方式称之为网络字节序。

特别需要注意的是,C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而 JAVA编写的程序则唯一采用big endian方式来存储数据。这里我就只讨论C/C++语言的情况。

1.大端和小端的方式及判断

举个例子说明,我的机子是32位windows的系统,处理器是AMD的。对于一个int型数0x12345678,为方便说明,这里采用16进制表示。这个数在不同字节顺序存储的CPU中储存顺序如下:

0x12345678   16进制,两个数就是一字节

高有效字节——>低有效字节: 12 34 56 78

          低地址位     高低址位

大端:  12  34        56   78

小端: 78  56        34   12

代码语言:javascript
复制
#include<stdio.h>

int main(void ){
   unsigned int x =0x12345678;
   unsigned char *p = (unsigned char *)&x;
   printf("%0x %0x %0x %0x",p[0],p[1],p[2],p[3]);
   return 0;
}

   --------------鸣谢(NULL)作者,本篇文章只供自己学习,若原始作者能够有建议,请邮件通知本人删除!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-01-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档