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

编程中遇到的计算机大小端概念

概念

大小端(Endian)是指在一个多字节的数据中,字节的存储顺序的规定。通俗来说,就是指数据在计算机内部存储时的顺序问题。

在计算机系统中,一个数据项可能占据多个存储单元。在这种情况下,这个数据项的存储顺序可以分为两种方式:大端序(Big Endian)和小端序(Little Endian)

请以下两句话背诵:

大端序是:指将高位字节存储在内存的低地址处,而将低位字节存储在内存的高地址处。

小端序则相反:将低位字节存储在内存的低地址处,而将高位字节存储在内存的高地址处。

举个例子,假设我们有一个16位的整数0x1234,它在内存中的存储方式如下:

大端序: 0x12 0x34 (高位字节在前)

小端序: 0x34 0x12 (低位字节在前)

不理解内存没事,你可以想象成是字节数组

大端序: [0x12,0x34] (高位字节在前)

小端序: [0x34,0x12] (低位字节在前)

大端序和小端序的应用场景不同。在网络通信中,大多数协议采用的是大端序,而在x86系列CPU中,则采用小端序。

在实际开发中,我们需要根据具体的场景和需求选择合适的大小端序方式,保证程序的正确性

出现原因

大小端序的存在是由于计算机在存储多字节数据时,需要确定字节的存储顺序。这个问题在早期计算机硬件设计中就已经存在,因为不同的处理器架构采用不同的字节存储顺序,这就导致了同一份数据在不同的处理器上可能被存储成不同的形式,而这对于数据的传输和解析都会带来问题。

早期计算机硬件设计师通常使用大端序作为默认的字节存储顺序,因为这种方式更符合人类的直觉,也更容易理解和记忆。但是,后来一些处理器架构采用了小端序,因为这种方式更方便进行一些运算操作,如加减乘除、位移等等,同时也可以节省硬件成本。因此,现代计算机系统通常采用小端序,如 x86、ARM 等处理器。

由于不同的处理器架构采用不同的字节存储顺序,因此在进行跨平台的数据传输和解析时,需要考虑字节序的问题。网络协议通常都规定了使用大端序进行数据传输,这样可以保证不同处理器上的数据传输和解析结果一致。因此,在进行网络编程时,需要特别注意大小端序的问题,以避免数据传输和解析出现错误。

通俗理解

由于计算机历史原因处理器架构的不同,还有为了兼容人们阅读数据的顺序和计算机执行的顺序,导致出现了大端序(Big Endian)和小端序(Little Endian)差异。

大端序: [0x12,0x34] (高位字节在前,符合人类阅读习惯)

小端序: [0x34,0x12] (低位字节在前,更方便计算机执行运算)

java实践

jvm屏蔽了底层细节,日常遇到的一般都是大端序。

在 Java 中可以使用 ByteBuffer 类来进行大小端的判断

public static void checkEndian(byte[] bytes) {ByteBuffer bb = ByteBuffer.wrap(bytes);if (bb.order() == ByteOrder.BIG_ENDIAN) {System.out.println("This is a big-endian system.");} else {System.out.println("This is a little-endian system.");}
}

http://www.lryc.cn/news/39100.html

相关文章:

  • 日志与可视化方案:从ELK到EFK,再到ClickHouse
  • 字符函数和字符串函数(上)——“C”
  • 九龙证券|下周解禁市值超400亿元,3股解禁压力较大
  • 一个大型网站架构的演变历程
  • 前端前沿web 3d可视化技术 ThreeJS学习全记录
  • 链表经典笔试题(LeetCode刷题)
  • SpringCloud五大组件
  • Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
  • 聊聊腾讯T13技术专家被开除
  • c++ 常见宏、模板用法【1】
  • 【25】Verilog进阶 - 序列检测
  • 如何绕开运营商的 QoS 限制
  • C#基础教程22 异常处理
  • java八股文--java基础
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块第四套解析(详细)
  • 【Spark】spark使用jdbc连接带有kerberos认证的hive jdbc
  • 【Maven】项目中pom.xml坐标定义以及pom基本配置
  • Linux GCC 编译详解
  • 谁说程序员不懂了浪费,女神节安排
  • 上市公司管理层短视指标(2007-2020)
  • IDDPM 和 DDIM 对比
  • 链表OJ题(上)
  • 【题解】百度2021校招Web前端工程师笔试卷(第一批):单选题、多选题
  • 论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description
  • 游戏玩的多,陪玩你了解的多吗?用Python来采集陪玩数据,看看行情和美照
  • React框架创建项目详细流程-项目的基本配置-项目的代码规范
  • nnunet入门之一 (CT图像分割)
  • 从0到1_批量下载视频
  • CNCF x Alibaba云原生技术公开课 第十二章 可观测性:监控与日志
  • C语言宏定义几个问题