需要注意字节序的大端(big endian)和小端(little endian)的几种情景

2023-10-27

大端(big endian):在内存中,按照从最低有效字节到最高有效字节的顺序存储对象,即数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。
小端(little endian):在内存中,按照从最高有效字节到最低有效字节的顺序存储对象,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
下图举例摘自CSAPP:
这里写图片描述
大多数Intel兼容机都用小端模式,IBM和Oracle的大多数机器使用大端模式。有些比较新的微处理器是双端法(bi-endian),即可以把它们配置成大端或小端的机器运行。但是,实际上,一旦选择了特定的操作系统,那么字节序也就固定下来了。对多数应用程序员来说,字节序是透明的,不需要关心,但是,在以下几种情景中,需要注意了:
1、在不同类型的机器之间通过网络传送二进制数据时,网络应用程序的编写必须遵守已建立的字节序规则,发送方将它的内部表示转换成网络标准,而接收方则将网络标准转换为它的内部表示;
2、在检查机器级程序时,阅读表示整数数据的字节系列时字节顺序很重要;
3、对于有些系统级编程来说,有时需要编写规避正常的类型的程序,比如C中的强制类型转换(cast)或联合(union)。
下面给出一个例子检测当前机器是大端存储还是小端存储:

BOOL IsLittleEndianMode()
{
    union _DATA
    {
        int Para1;
        char Para2;
    } data;
    data.Para1 = 1;
    BOOL RetVal = FALSE;
    if ( data.Para2 ==  1 )
    {
        RetVal = TRUE;
    }
    return RetVal;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要注意字节序的大端(big endian)和小端(little endian)的几种情景 的相关文章

  • so库的反编译,反汇编

    Linux APP SO的反汇编工具 ida Pro 可以反汇编app和SO库 有函数名 但是不能反编译到code这一级别 下载最强的反编译工具 ida Pro 6 4 Plus rar 还有这个反汇编工具 没用过 转自 http bbs
  • PHP学习笔记——加密解密

    一 MD5算法 MD5消息摘要算法 Message Digest Algorithm 是R Rivest设计的 它对输入的任意长度的消息进行运算 产生一个128位的消息摘要 随着穷举攻击和密码分析的发展 MD5算法已经不再那么流行了 1 算
  • Python 中 import 的机制与实现

    转自 http python jobbole com 82604 本文所涉及到的代码在github上 概述 Python 是一门优美简单 功能强大的动态语言 在刚刚接触这门语言时 我们会被其优美的格式 简洁的语法和无穷无尽的类库所震撼 在真
  • boost::bind 详解

    转自 https www cnblogs com benxintuzi p 4862129 html boost bind是标准库函数std bind1st和std bind2nd的一种泛化形式 其可以支持函数对象 函数 函数指针 成员函数
  • MD5 加密算法详细介绍

    MD5是什么 message digest algorithm 5 信息 摘要算法 经常说的 MD5加密 就是它 信息 摘要算法 在下载一下东西时 经常在一些压缩包属性里 看到md5值 而且这个下载页面 很可能会在某一个地方 写了一句 此文
  • Unity3D protobuf-net使用方式

    1 下载protobuf net 2 创建Unity工程 创建一个Plugins文件夹 将protobuf net解压把里面得protobuf net放到Plugins 3 创建一个名为mcs的文本文件 里面写上 unsafe 4 重启Un
  • 需要注意字节序的大端(big endian)和小端(little endian)的几种情景

    大端 big endian 在内存中 按照从最低有效字节到最高有效字节的顺序存储对象 即数据的高字节 保存在内存的低地址中 而数据的低字节 保存在内存的高地址中 小端 little endian 在内存中 按照从最高有效字节到最低有效字节的
  • linux shell 编程

    转自 http blog csdn net fpmystar article details 4183678 和 http blog csdn net buutterfly article details 6615162 在进行linux测
  • C++智能指针简单剖析

    转自 https www cnblogs com lanxuezaipiao p 4132096 html 导读 最近在补看 C Primer Plus 第六版 这的确是本好书 其中关于智能指针的章节解析的非常清晰 一解我以前的多处困惑 C
  • C++ STL之vector用法总结

    转自 https www cnblogs com zhonghuasong p 5975979 html 介绍 vector是表示可变大小数组的序列容器 就像数组一样 vector也采用的连续存储空间来存储元素 也就是意味着可以采用下标对v
  • 机器学习——深度学习(Deep Learning)

    Deep Learning是机器学习中一个非常接近AI的领域 其动机在于建立 模拟人脑进行分析学习的神经网络 最近研究了机器学习中一些深度学习的相关知识 本文给出一些很有用的资料和心得 Key Words 有监督学习与无监督学习 分类 回归
  • 理解CPU/寄存器/内存之间的关系

    转自 https blog csdn net qq 27689785 article details 82975575 CPU 寄存器 内存 因为要了解多线程 自然少不了一些硬件知识的科普 我没有系统学习过硬件知识 仅仅是从书上以及网络上看
  • R与SPSS、SAS相比较_Python 在数据分析工作中的地位与R语言、SAS、SPSS 比较如何?

    转自 http m elecfans com article 611407 html 统计分析的软件和程序分析 能够用来做统计分析的软件和程序很多 目前应用比较广泛的包括 SPSS SAS R语言 Matlab S PLUS S Miner
  • C/C++编程笔记:C++中的指针与引用,又在什么时候使用?

    C和C 支持与大多数其他编程语言不同的指针 其他语言包括C Java Python Ruby Perl和PHP 从表面上看 引用和指针非常相似 都用于使一个变量提供对另一变量的访问 两者都提供了许多相同的功能 因此通常不清楚这些不同机制之间
  • QT学习——QFileSystemModel与QTreeView显示文件夹下的文件信息

    最近因为项目需求 使用QT做界面 新手学习 记录一些笔记 虽然QT已经做好了标准对话框的国际化 但是有时候对于中文的翻译可能达不到我们期望的 所以就需要我们自己来修改 比如下面的代码中 利用了国际化 写在main函数中 QApplicati
  • 24时区来源,CST,CET,UTC,DST,Unix时间戳概述、关系、转换

    全球24个时区的划分 相较于两地时间表 显示世界各时区时间和地名的世界时区表 Universal WorldTime 就显得精密与复杂多 通常世界时区表的表盘上会标示着全球24个时区的城市名称 全球24个时区是如何产生的 过去世界各地原本各
  • QT学习——QTreeView获取选中单行数据和多行数据

    个人感觉QTreeView有些地方的使用没有MFC的CListCtrl方便 比如在不响应单击信号的情况下 获取选中行的数据 单行和多行 也许因为我是新手吧 一 获取单行选中的数据 QModelIndex selected ui treeVi
  • C++11的时间新特性之high_resolution_clock

    转自 https blog csdn net cw hello1 article details 66476290 我在这里只是说一说high resolution clock的时间用法 这里有一个C 的网上的API地址 包含了C 11的新
  • Thread Local Storage---__thread 关键字的使用方法

    转自 http blog csdn net yusiguyuan article details 22938671 thread是GCC内置的线程局部存储设施 存取效率可以和全局变量相比 thread变量每一个线程有一份独立实体 各个线程的
  • 开源软件许可证—GPL、AGPL、LGPL、Apache、ZLIB/LIBPNG、MIT

    转自 http www dushibaiyu com 2013 08 E5 BC 80 E6 BA 90 E8 BD AF E4 BB B6 E8 AE B8 E5 8F AF E8 AF 81 gpl E3 80 81agpl E3 80

随机推荐

  • pip工具使用之版本变更及恢复

    1 版本变更 降低版本 pycharm安装第三方库 Try to run this command from the system terminal Make sure that you use the问题 亲测已解决 爱编程的小新的博客
  • STL-String容器

    string本质上是一个类 string 类内部封装了很多成员方法 例如 查找find 拷贝copy 删除delete 替换replace 插入insert string管理char 所分配的内存 不用担心复制越界和取值越界等 由类内部进行
  • Android通用的筛选栏实现

    最近事情比较多 不管是生活还是工作 感觉节奏都在赶着走 对于之前相对比较喜欢自由的我 也要慢慢适应之后的节奏了 不管怎样 生活还在继续 加油 今天来写一个通用的筛选栏的实现 也是因为之前项目中要好多地方用到筛选栏这么个东西 所以为了之后用起
  • C++基础知识 - 类模板函数写在类的外部

    1 所有的类模板函数写在类的外部 在一个cpp中 include
  • Could not initialize class sun.awt.X11GraphicsEnvironment

    当你的代码出现这一段你不慌吗 其实解决方法很简单 这一段代码很重要 用了它就能在linux环境下没有桌面的情况下运行验证码 在静态代码块中添加这一段表示启用headless模式就不用下载桌面环境了 static System setProp
  • 2014年2月21日星期五(DEMO7-6战区漫步)

    这是本章最后一个例子 与上个例子不同的是 1 加载的物体是2个 2 用了欧拉相机 视野120度 这个DEMO是个综合 应该没有新的函数了 稍微简单些 首先设定个宇宙空间 以及 各物体参数 define UNIVERSE RADIUS 400
  • 集成 Redis & 异步任务-SpringBoot 2.7 .2实战基础

    学SpringBoot 2 7 2实战基础 09 集成 Redis 异步任务 1 集成Redis docker 安装 MySQL 和 Redis 一文已介绍如何在 Docker 中安装 Redis 本文就看看 SpringBoot 如何整合
  • warning: #1295-D: Deprecated declaration lcd_init - give arg types

    将void lcd init 改为void lcd init void 即可
  • FFMPEG视音频编解码学习笔记

    文章转载自 http www jianshu com p 5c7bec29fdbd 一直对音视频这块比较感兴趣 但是一直不知道从何下手 终于找到了比较好的资料 希望通过接下来的时间好好研究一下FFMPEG相关的知识 这里感谢一下雷霄骅大神
  • 2022年软件测试面试题分享

    一 上来必然是自我介绍 自我介绍是任何一个面试过程中必不可少的环节 并且可以说是最重要的环节 因为每个面试官都需要用最短的时间去了解你这个人 以前干过什么 有过几年经验 做过哪些项目 可以说 通过一个简短的自我介绍 面试官心里已经有50 的
  • UE4状态机

    1 准备一套带动作的模型 并导入UE4 2 新建一个动画蓝图 右键 gt Animation gt AnimationBlueprint 选择继承AnimationInstance 并选择相应的骨骼 命名HeroAnimation 3 双击
  • 【网络编程】【UDP】UDP协议介绍

    一 UDP介绍 UDP和TCP相比是截然不同的 是一个简单的传输协议 全称是用户数据包协议 User Datagram Protocol 是一个无连接协议 UDP不保证UDP数据报会到达其最终目的地 不保证各个数据报的先后顺序跨网络后保持不
  • 操作复杂对象结构——访问者模式(四)

    26 4 访问者模式与组合模式联用 在访问者模式中 包含一个用于存储元素对象集合的对象结构 我们通常可以使用迭代器来遍历对象结构 同时具体元素之间可以存在整体与部分关系 有些元素作为容器对象 有些元素作为成员对象 可以使用组合模式来组织元素
  • Fortify自定义规则笔记(一)

    一 Fortify SCA 自定义规则介绍 Fortify是一款强大的静态代码扫描分析工具 其发现代码漏洞缺陷的能力十分强悍 主要是将代码经过编译 依托于其强大的内置规则库来发现漏洞的 其次fortify SCA 团队在开发此商业工具时 也
  • 使用el-dialog组件嵌套,导致页面整体出现遮罩层无法操作,页面多出<div class=‘v-modal‘ tabindex=‘0‘ style=‘z-index:2001‘></div>标签

    样例 解决 方法一 给嵌套dialog添加属性 append to body值为 true 方法二 如果不需要遮罩层可以采用此方法
  • PackageNotFoundError: Package not found at ‘*.doc’

    我通过python docx读取一个docx文件 路径确认无误的情况下 还是报错了 上代码 from docx import Document path E Python project pro1 fafa docx doc Documen
  • SprigBoot--Redis之 @Cacheable总结

    Cacheable总结 Redis的作用很多 缓存是其中之一 作为内存数据库 效率不言而喻 热点 高频搜索词汇基本都要进行缓存 Java使用redis是一件麻烦的事情 需要使用客户端API去操作 如Jedis lettuce Spring对
  • Java实现redis缓存效果变量过期

    目录 1 实现 2 测试 3 接口 1 实现 redis中的Expire命令用于设置 key 的过期时间 key 过期后将不再可用 不过有些变量我们不需要设置到redis中 只要存到本地就可以了 也需要过期时间 也可以同样方法定义一个全局变
  • 阿里云短信验证码实战

    一 创建阿里云短信权限用户 1 登陆阿里云之后我们点击头像 接着点击AccessKey 2 选择开始使用子用户 3 我们先要创建一个用户组 4 依次点击新建的用户组 授权管理 给用户组授权 开通短信验证码服务 5 接着我们新建一个用户 具体
  • 需要注意字节序的大端(big endian)和小端(little endian)的几种情景

    大端 big endian 在内存中 按照从最低有效字节到最高有效字节的顺序存储对象 即数据的高字节 保存在内存的低地址中 而数据的低字节 保存在内存的高地址中 小端 little endian 在内存中 按照从最高有效字节到最低有效字节的