Big Endian与Little Endian区别

2023-11-07

author:skate
time :2010/03/05


 

Big Endian与Little Endian区别

 

1. 什么是Big Endian和Little Endian?

 

在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的
最右边部分(也就是数据的最低位部分)。比如一个16进制数字0x12345678,在内存存放的方式如下:

 

       低地址 ------------------> 高地址
       ####################################################
值    #0111,1000 #0101,0110 # 0011,0100  #  0001,0010  #
       ####################################################
地址 #      100        #     101        #          102       #      103          #
       ####################################################

 另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分(也就是数据的最高为部分)。
 比如一个16进制数字0x12345678,在内存存放的方式如下:


       低地址 ------------------> 高地址
       ####################################################
 值   # 0001,0010  #0011,0100 # 0101,0110  #  0111,1000  #
       ####################################################
地址 #       100         #     101         #        102        #        103         #
       ####################################################


从上面的例子可以看到,采用big endian方式存储数据是符合我们人类的思维习惯的


big endian:是指低地址存放最高有效字节(MSB:Most Significant Byte, 最高有效字节),
little endian:则是低地址存放最低有效字节(LSB:Least Significant Byte, 最低有效字节)


谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。
IBM, Motorola(Power PC), Sun的机器一般采用大端(big endian)方式存储数据。而x86系列则采用
little endian方式存储数据

 

是Little Endian还是Big Endian与操作系统和芯片类型都有关系。 具体情形参考处理器手册。

 

2. 如何判断系统是Big Endian还是Little Endian

 

在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),确定其值。
这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中,不同的操作系统可能
有所不同。一般来说,Little Endian系统BYTE_ORDER(或_BYTE_ORDER,__BYTE_ORDER)为1234,Big Endian系统为4321


3. 为什么要注意字节序的问题?

 

在单机环境里的程序不用考虑字节序(endian)的问题,因为字节序的不同是在不同单机环境里的,如果你要在不同单机
之间传递数据,就要考虑字节序的问题,因为数据是按地址存取的,如果你是不同的字节序单机通信,就会导致传输数据
”变异“,例如,把little endian环境的数据0x12345678的指针传递给big endian环境,数据就“变异”为0x78563412

 

所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采
用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

 

 

在异构主机数据库迁移的过程一定要注意这个,如果字节序不同,可以用rman convert转换字节序(endian)

 

例如:

 

RMAN TARGET /
CONVERT TABLESPACE ts1,ts2 TO PLATFORM 'Linux IA (32-bit)' FORMAT '/tempdir/%U';

 

 

 


----end----

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Big Endian与Little Endian区别 的相关文章

  • 毕业设计 HTTP 自助服务

    目录 项目 HTTP 自助服务 介绍 项目展示 背景知识 HTTP 协议 HTTP自主服务编写 sock 套接字编写 Tcp 服务器编写 小组件 锁守卫 lockGuard 测试Tcp服务器运行 编写 HTTP 服务 Tcp 服务中获取监听
  • 在java/android中合并两个字节

    我有一个 22 字节的帧 该帧是通过蓝牙来自加速度计的输入流 加速度计读数是一个 16 位数字 分为两个字节 当我尝试将字节与 buffer 1 buffer 2 合并时 而不是添加字节 它只是将结果并排放置 所以 1 2 12 有人可以告
  • C++ 2.5 字节(20 位)整数

    我知道这很荒谬 但我需要它来优化存储 有什么好的方法用C 实现吗 它必须足够灵活 以便我可以将它用作普通数据类型 例如Vector lt int20 gt 运算符重载等 如果存储是您主要关心的问题 我怀疑您需要相当多的 20 位变量 将它们
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • Python 3 - 从整数转换为“字节”然后连接它们(用于串行传输)

    经过多次毫无结果的搜索 我在理解 Python 3 2 中处理 字节 和十六进制内容的方式时遇到了一个非常具体的问题 我知道我误解了 但似乎无法找到正确的路径 我的最终目标是使用python串行模块来传输字节序列 有些字节是静态的 不会改变
  • 对于这个 Java ByteBuffer 的行为有解释吗?

    我需要将数值转换为字节数组 例如 要将 long 转换为字节数组 我有以下方法 public static byte longToBytes long l ByteBuffer buff ByteBuffer allocate 8 buff
  • 缩放数组(矩阵)

    该程序的目的是创建一个更大的字节数组 将原始数组放大 10 倍 例如 0 0 中的 1 应该是新数组中由 1 组成的 10x10 正方形 我提供了代码和输出 它们在填充较大数组期间似乎可以正常工作 但随后会打印不同的值 我目前正在尝试仅使用
  • 在 C/C++ 中读/写半字节(无位字段)

    有没有一种简单的方法可以在不使用位字段的情况下读取 写入字节中的半字节 我总是需要读取两个半字节 但需要单独写入每个半字节 Thanks 使用面膜 char byte byte byte 0xF0 nibble1 0xF write low
  • C# - 读取字节,它们是什么以及发生了什么。我期望二进制值,而不是十进制数

    我已经成为一名程序员几年了 但我从来没有had了解涉及字节的低级操作 然而它让我感兴趣 并且我想了解更多有关使用字节的信息 在下面的代码中 我正在读取一个仅包含 嗨 那里 一词的文本文件 FileStream fileStream new
  • 如何在 C# 中将 byte[] 分配为指针

    我有一个函数 可以根据任何数据包的内容生成 CRC 校验字节 问题在于将该函数从 C 转换为 C C 代码 unsigned char GenerateCheckByte char packet int length unsigned lo
  • 撇号打印为 â\x80\x99

    import requests from bs4 import BeautifulSoup import re source url requests get http www nytimes com pages business inde
  • 为什么字符串的字节大小比长度长? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为什么会这
  • 如何获取以 Uint8Array 表示的图像的大小?

    我有一个用户头像图片的字节数组 它表示为键入的Unit8Array const imageBytes new Unit8Array 现在我需要检查图像大小以设置一些限制以防止用户放置大量图像 但我无法想出如何计算图像大小的想法 我该如何编写
  • 将二进制字符串转换为字节数组

    我有一个由 1 和 0 组成的字符串 我想将其转换为字节数组 例如String b 0110100001101001 我怎样才能将其转换为byte 长度为2 将其解析为以 2 为基数的整数 然后转换为字节数组 事实上 既然你已经有了 16
  • 刷新数据库是什么意思?还带有“闪”

    我想知道 flush 和 flash 是什么意思以及它们之间的区别 Flushing 将应用程序数据的临时状态与数据的永久状态 在数据库中或磁盘上 同步 说明 刷新实际上是一个缓存术语 而不是数据库术语 当您使用 ORM 或应用程序保存数据
  • Ruby - 如何将消息长度表示为 2 个二进制字节

    我正在使用 Ruby 并且正在与一个网络端点进行通信 该端点需要在发送消息本身之前格式化 标头 标头中的第一个字段必须是消息长度 它被定义为网络字节顺序中的 2 个二进制字节消息长度 例如 我的消息长度是1024 如何将 1024 表示为二
  • 将位的字符串表示形式转换为字节

    我刚刚开始学习文件压缩 但遇到了一些障碍 我有一个应用程序将诸如 程序 之类的字符串编码为压缩的二进制表示形式 010100111111011000 请注意 这仍然存储为字符串 Encoding g 111 r 10 a 110 p 010
  • boto3 S3 对象解析

    我正在尝试编写一个 Python 脚本来处理存储在 S3 上的音频数据 我有一个 S3 对象 我正在使用它调用 def grabAudio filename directory obj s3client get object Bucket
  • 如何使用 opencv 从字节显示视频?

    我正在开展一个项目 其中我们使用无线电调制解调器将数据 视频和遥测 从无人机传输到地面站 我们需要做的是实时显示视频 并能够知道 C 中的每一块遥测数据对应哪一帧 数据被解封装为遥测和视频 mpeg4 字节 由于我对 OpenCV 有一些经
  • 如何在Java中读取文件的最后“n”个字节

    如何在不使用 RandomAccessFile 的情况下从文件中读取最后 n 个字节 我的文件中的最后 6 个字节包含写回文件时的重要信息 我需要写入原始文件 然后将最后 6 个字节附加到其他地方 有什么指导吗 谢谢 你必须使用随机存取文件

随机推荐

  • Java调用WebService接口的四种方式

    调用WebService 使用wsimport生成代码 不推荐 使用Axis 1 4 动态调用 使用HTTP SOAP方式远程调用 通过Spring注解方式调用 使用wsimport生成代码 不推荐 配置java环境变量后在命令窗口中输入
  • Keil提示错误L6218E:Undefined symbol TIM_OC2Init解决办法

    1 如题 我在将正点原子的PWM输出代码移植到led的程序上 编译后发现报了七个错误 都是L6218E 2 由于这个是标准库 程序中引用了很多ST官方的库函数 但是你没有引用 所以会报错 对比正点原子的代码内容和我的 发现我的FWLIB中缺
  • JavaScript 数据结构之数组

    JavaScript 数据结构之数组思维导图 JavaScript 数据结构之数组源码
  • Kafka最详细总结

    Kafka Kafka是最初由Linkedin公司开发 是一个分布式 支持分区的 partition 多副本的 replica 基于zookeeper协调的分布式消息系统 它的最大的特性就是可以实时的处理大量数据以满足各种需求场景 比如基于
  • mac android自动化测试学习心得,解决uiautomator视图界面无法打开的问题

    原因是我安装的jdk版本为9 0 4 彻底卸载后 安装8即可正常启动 输入命令 sudo rm fr Library Internet Plug Ins JavaAppletPlugin plugin sudo rm fr Library
  • 各版本Pytorch安装详解

    Pytorch安装教程 windows版本 conda安装 1 cuda9 0 python3 6 3 5 3 7 conda install pytorch c pytorch pip3 install torchvision 2 cud
  • AVFoundation 播放器实例

    播放器 使用苹果官方的 AVFoundation 框架 可以很容易的封装一个视频的播放器 在获取视频资源后 只需要将视频在播放图层中渲染即可 并且可以在图层中添加控件 以便对视频的播放和暂停进行控制 下面封装的库 主要包含两个类 HXJPl
  • FTP云盘

    参考 FTP云盘项目 作者 糯米啊啊 发布时间 2021 08 19 10 34 05 网址 https blog csdn net weixin 43732386 spm 1001 2014 3001 5509 参考 自制FTP云盘项目
  • 纯干货基于flinkcdc实现mysql到mysql/oracle/...... DML实时同步

    CDC 首先什么是CDC 它是Change Data Capture的缩写 即变更数据捕捉的简称 使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游 供下游使用 这些变更可以包括INSERT DELETE UPDATE等操作
  • c++实现冒泡排序

    用c 实现冒泡排序 include
  • 大数据分析实例:使用Python进行数据清洗与可视化

    大数据分析实例 使用Python进行数据清洗与可视化 随着大数据时代的到来 数据分析在各个领域中扮演着重要的角色 本文将介绍如何使用Python进行大数据分析的实例 包括数据清洗和可视化技术 我们将使用Python中一些常用的库 如NumP
  • Flask+MySQL学生信息维护系统

    Python课程期末项目 小白一个 学生信息维护系统项目概述 学生管理系统是一个基于 Python 的 Flask MySQL 项目 旨在实现对学生信息的管理和查询 该系统主要包括学生信息录入 信息查询 信息修改和信息删除 信息可视化等功能
  • 定时器的相关知识与运用定时器相关的程序

    一 定时器的介绍 1 定时器的介绍 51单片机的定时器属于单片机的内部资源 其电路的连接和运行均在单片机内部完成 2 定时器作用 1 用于计时系统 实现软件计时 或者使程序每隔一固定时间完成一项操作 2 替代长时间的Delay 提高CPU的
  • 如何解决IE浏览器主页被改为2345.com

    如何解决IE浏览器主页被改为2345 com 将桌面上IE图标删除 也将开始中的IE图标删除了 找到C Program Files Internet Explorer 将IE图标重新放在了桌面上 点击IE之后 终于好使了
  • 安装rpm软件,丢失库解决方案

    1 问题 root fei rpm ivh libevent 1 4 13 4 el6 i686 rpm error Failed dependencies libc so 6 is needed by libevent 1 4 13 4
  • go语言WaitGroup 实现原理

    Go语言中的WaitGroup是一种并发原语 用于等待一组goroutine的完成 它提供了三个方法 Add Done 和Wait Add delta int 向计数器添加或减去给定的值 delta可以为负数 Done 减少计数器的值 相当
  • [网络安全提高篇] 一二三.恶意样本分类之基于API序列和深度学习的恶意家族分类详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • SpringCloud -Nacos服务注册与发现

    Nacos简介 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据及流量管理 Nacos 具有如下特性 服务发现和服务健康监测 支持基于DNS和基于RPC
  • c++ 实现压缩

    简介 目标 使用c 压缩文件夹 方法 调用exe来实现的压缩 这里调用的是自己编译的minizip exe 环境 win10 win7 visual studio 2019 资源 https github com ltCodeW miniz
  • Big Endian与Little Endian区别

    author skatetime 2010 03 05 Big Endian与Little Endian区别 1 什么是Big Endian和Little Endian 在设计计算机系统的时候 有两种处理内存中数据的方法 一种叫为littl