大端模式与小端模式

一 什么是大端模式与小端模式?

      大端模式小端模式是指 保存多字节数据时候排序字节的顺序

      可简单理解成现实生活中数字 大端正排序 1234  与 小端倒排序 4321,

      判定大小端看排序:  倒序是小端正序(顺眼)是大端

1 大端模式(Big-Endian)

指数据的高位字节排放在内存的低地址端低位字节排放在内存的高地址端

例如:一个32位的大端模式整数0x12345678,其存储方式如下:

低地址 ----> 高地址
0000: 12 34 56 78

其中,0x12是高位字节,0x78是低位字节。 

 

2 小端模式(Little-Endian)

与大端模式相反,是指数据的低位字节排放在内存的低地址端高位字节排放在内存的高地址端。例如,同一个32位的小端模式整数0x12345678,其存储方式如下:

低地址 ----> 高地址
0000: 78 56 34 12

其中,0x78是低位字节,0x12是高位字节。

二 判定系统 大端模式 或 小端模式

      大端模式和小端模式的由来可以追溯到不同的历史时期。在早期的一些计算机架构中,大端模式是更常用的字节序。然而,随着Intel x86架构的普及,小端模式逐渐成为主流。目前,大多数现代计算机都采用小端模式。

常见的小端模式系统:

  • window 与 Linux 系统,基本都采用了x86 架构(如 Intel 和 AMD 的处理器),x86 架构支持小端模式(Little Endian)。
  • Android 系统采用的ARM 架构,ARM 架构通常支持小端模式,但某些 ARM 处理器可能支持大端模式(Big Endian)。

常见的大端模式系统:

  • 嵌入式系统,例如网络路由器、物联网设备、智能家居设备多数采用MIPS 架构或PowerPC 架构,它们通常支持大端模式。

1 判断系统大小端

   用 java代码判断系统大小端,如下图:

       ByteOrder byteOrder = ByteOrder.nativeOrder();
        if (byteOrder.equals(ByteOrder.BIG_ENDIAN)) {
            System.out.println("系统是大端模式");
        } else {
            System.out.println("系统是小端模式");
        }

 

 

用 C 代码判断系统大小端

#include <stdio.h>

int main() {
    union {
        unsigned int i;
        unsigned char c[4];
    } test;

    test.i = 0x12345678;

    if (test.c[0] == 0x78 && test.c[1] == 0x56 && test.c[2] == 0x34 && test.c[3] == 0x12) {
        printf("系统是小端模式\n");
    } else if (test.c[0] == 0x12 && test.c[1] == 0x34 && test.c[2] == 0x56 && test.c[3] == 0x78) {
        printf("系统是大端模式\n");
    } else {
        printf("无法确定系统字节序\n");
    }

    return 0;
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qyhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值