不同CPU字节序的差异
CPU存储字节序列,必然牵扯到两大CPU派系,那就是Motorola的PowerPC系列CPU和Inter的x86系列的CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。
基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是大端字节序的。JAVA字节序也是(大端字节序)BIG-ENDIAN【这句话摘自博客https://blog.csdn.net/dianyuetong6243/article/details/101484835】。
字节序就讲的是占用多个字节的数据类型(int,long等)在内存中的存放顺序。
端模式
大于一个字节类型的数据在内存中的存放顺序,在计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian。
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
数组变量在栈上是如何布局:
栈底 (高地址)
buf[3]
buf[2]
buf[1]
buf[0]
栈顶 (低地址),由此看出栈是向下增长的。
字节的高低
如果我们有一个32位无符号整型0x12345678,那么高位是什么,低位又是什么呢? 其实很简单。在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78。
高/低地址端和高/低字节都弄清了。我们再来回顾 一下Big-Endian和Little-Endian的定义。
Big-Endian: 低位字存放在内存的高地址中,如下图:
栈底 (高地址)
buf[3] (0x78) – 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) – 高位
栈顶 (低地址)
栈的介绍
栈是向下生长的(所以先进后出),栈顶和栈底不是上下决定,而是由入栈方向决定,栈的操作是只能在表的一端进行插入和删除,特点是先进后出,pop拿出数据,push放入数据。
Little-Endian: 低位字存放在内存的低地址中,如下图:
栈底 (高地址)
buf[3] (0x12) – 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) – 低位
栈 顶 (低地址)
————————————————
原文链接:https://blog.csdn.net/fguihbfg/article/details/83832626
通过程序判断大小端
int i = 1;
//将int 转换到数组中,然后根据数组的地址进行判断
byte[] buf = BitConverter.GetBytes(i);
if (buf[0] == 1)
{
MessageBox.Show("小端");
}
else
{
MessageBox.Show("大端");
}