当前位置: 首页 > news >正文

大小端存储的概念和判断

大小端(Endianness)是指在计算机内存中存储多字节数据(如整数、浮点数等)时,字节的排列顺序。这种排列顺序对于数据的存储、传输和处理非常重要,尤其是在跨平台通信和多语言编程中。

1. 大端(Big-Endian)
  • 定义:大端模式是指高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。

  • 特点:这种排列方式与人类阅读数字的习惯一致(从高位到低位),因此被称为“大端”。

  • 示例: 假设有一个 32 位整数 0x12345678,在大端模式下,其存储顺序为:

    内存地址: 0x00   0x01   0x02   0x03
    存储内容: 12     34     56     78
2. 小端(Little-Endian)
  • 定义:小端模式是指低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。

  • 特点:这种排列方式与人类阅读数字的习惯相反,因此被称为“小端”。

  • 示例: 同样假设有一个 32 位整数 0x12345678,在小端模式下,其存储顺序为:

    内存地址: 0x00   0x01   0x02   0x03
    存储内容: 78     56     34     12

如何判断系统是大端存储还是小端存储,定义一个字符变量,让它超过字符变量的字节长度,后来的会覆盖前面的,

char a = 0x12345678;
printf("%x", a);

 如果是大端输出会是78,小端为12,当然,这个办法其实有点语法错误,毕竟char只有1个字节。

int isLittleEndian() {
    unsigned int x = 1;
    return !((char *)&x)[0];  // 如果低地址存储的是高位字节,则返回 0(大端)
}

 可以这样写,

定义一个 unsigned int 类型的变量 x,并赋值为 1

在小端模式下,x 的内存布局为:01 00 00 00,因此 ((char *)&x)[0] 的值为 1

在大端模式下,x 的内存布局为:00 00 00 01,因此 ((char *)&x)[0] 的值为 0

相关文章:

  • 2025年- G18-Lc92-169. 多数元素-java版
  • SQLmap 使用指南:开启安全测试高效之旅
  • React 高阶组件(HOC)
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(六) -> CSS动画
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter24-网络请求与远程资源
  • Spring Framework测试工具MockMvc介绍
  • 小程序类目调整汇总公告
  • Springer独立出版 EI检索 | 2025年第三届绿色建筑国际会议(ICoGB 2025)
  • 【SRC实战】修改金币数量实现财富自由
  • ARM Coretex-M核心单片机(STM32)找到hardfault的原因,与hardfault解决方法
  • rk3588增加独立分区
  • 【自学笔记】Vue基础知识点总览-持续更新
  • 智能运维语义标注体系技术框架与工程化实践
  • 【嵌入式原理设计】实验六:倒车控制设计
  • 深入Linux序列:进程的终止与等待
  • Python Cookbook-2.13 使用C++的类iostream语法
  • SSD网络预测与训练阶段总结
  • mysql多表查询
  • 【嵌入式Linux应用开发基础】网络编程(4):UDP协议
  • 数字可调控开关电源设计(论文+源码)
  • 央行:下阶段将实施好适度宽松的货币政策
  • 北外滩集团21.6亿元摘上海虹口地块,为《酱园弄》取景地
  • 胳膊一抬就疼,炒菜都成问题?警惕这种“炎症”找上门
  • 从黄土高原到黄浦江畔,澄城樱桃品牌推介会明日在上海举办
  • 潘功胜:坚定支持汇金公司在必要时实施对股票市场指数基金的增持
  • 赵乐际:深入学习贯彻习近平生态文明思想,推动森林法全面有效贯彻实施