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

高字节,低字节,大端序,小端序

本文内容中的疑问由智谱清言解答 

short value = 0x1234;
// 右移8位然后与0xFF进行位与操作,得到高字节
unsigned char high_byte = (value >> 8) & 0xFF; 
// 与0xFF进行位与操作,得到低字节
unsigned char low_byte = value & 0xFF; 

上述代码中使用的位操作并不依赖于CPU的字节序

位操作>>(右移)和&(位与)是在逻辑层面上进行的,与数据的实际存储顺序无关。

无论在大端还是小端系统中,value作为short类型的变量,其内部的位序列是相同的。

这意味着0x1234在内存中无论是0x12 0x34(大端)还是0x34 0x12(小端),位操作的结果都是一样的。

  • 右移8位 (value >> 8) 会将高8位移到低8位的位置,无论原始数据的字节序如何
  • 位与操作 (& 0xFF) 会将结果限制在低8位内,同样不受字节序的影响

--------

然而,如果你直接读取内存中的字节,而不是使用位操作,那么字节序就会产生影响。

例如,如果你尝试使用指针直接访问内存中的字节,那么在大端和小端系统中的结果会有所不同:

short value = 0x1234;
unsigned char *ptr = (unsigned char *)&value;

 在大端系统中,ptr[0]会是高字节,而ptr[1]会是低字节。 

在小端系统中,ptr[0]会是低字节,而ptr[1]会是高字节。

--------

高位字节,低位字节实际是一种逻辑层面的概念。它们与数据的实际存储方式(即字节序)是分离的。这些术语通常用于描述一个多字节值中各个字节的位置

在逻辑层面:

  • 高位字节(High Byte)通常指的是数值的左边部分。例如,在16位的数值0x1234中,0x12是高位字节。
  • 低位字节(Low Byte)通常指的是数值的右边部分。在同样的16位数值0x1234中,0x34是低位字节。

无论数据在大端(big-endian)还是小端(little-endian)系统中的存储顺序如何,高位字节和低位字节的逻辑概念是固定的:

  • 大端序中,高位字节存储在低地址,低位字节存储在高地址。例如,数值0x1234存储为0x12 0x34
  • 小端序中,低位字节存储在低地址,高位字节存储在高地址。数值0x1234存储为0x34 0x12

当我们使用位操作提取高位字节和低位字节时,这些操作是基于数值的逻辑表示,而不是基于其在内存中的实际存储顺序


http://www.mrgr.cn/news/70752.html

相关文章:

  • 浅谈C#之内存管理
  • 05-接口文档、根据接口文档完善登录功能
  • 论文阅读《机器人状态估计中的李群》
  • 鸿蒙next版开发:ArkTS组件通用属性(文本通用)
  • 初始化mysql5.7
  • python opencv3
  • 学习python的第九天之数据类型——tuple元组
  • 数学建模模型算法-Python实现
  • 自动渗透测试与手动渗透测试
  • springboot和vue:十六、JWT跨域认证代码(Cookie、Session、Token)
  • 深入浅出JUC常用同步器
  • 【漏洞复现】用友 U8CRM leadconversion.php Sql注入漏洞
  • 基于STM32U575RIT6智能除湿器项目
  • 【星闪EBM-H63开发板】AT固件的配置与测试
  • 121页PPT | 企业战略规划全景:战略设计、工具、模板和分析方法
  • JAVA完成猜数字小游戏
  • python练习-Django web入门
  • STM32:ADC
  • 万字长文解读机器学习——决策树
  • [C++]——位图与布隆过滤器
  • Rust 模板匹配——根据指定图片查找处于大图中的位置(支持GPU加速)
  • APP封装系统 app误报毒app可上传 自动实现5分钟随机更换包名和签名
  • VMnet NAT模式配置
  • Perfetto中如何使用SQL语句
  • MutationObserver与IntersectionObserver的区别
  • IEEE JSSC更新|Tiny Tapeout:让每个人都能设计定制芯片