CPU大端模式和小端模式详解,介绍如何通过程序验证计算机的大小端

不同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("大端");
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值