理解字节序

2023-05-16

1.

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。

举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。

  • 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
  • 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

同理,0x1234567的大端字节序和小端字节序的写法如下图。

2.

我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?

上周,我读到了一篇文章,解答了所有的疑问。而且,我发现原来的理解是错的,字节序其实很简单。

3.

首先,为什么会有小端字节序?

答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。

但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。

4.

计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。

如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。

理解这一点,才能理解计算机如何处理字节序。

5.

字节序的处理,就是一句话:

"只有读取的时候,才必须区分字节序,其他情况都不用考虑。"

处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。然后,就正常使用这个值,完全不用再考虑字节序。

即使是向外部设备写入数据,也不用考虑字节序,正常写入一个值即可。外部设备会自己处理字节序的问题。

6.

举例来说,处理器读入一个16位整数。如果是大端字节序,就按下面的方式转成值。


= buf[offset] * 256 + buf[offset+1];
  

上面代码中,buf是整个数据块在内存中的起始地址,offset是当前正在读取的位置。第一个字节乘以256,再加上第二个字节,就是大端字节序的值,这个式子可以用逻辑运算符改写。


= buf[offset]<<8 | buf[offset+1];
  

上面代码中,第一个字节左移8位(即后面添8个0),然后再与第二个字节进行或运算。

如果是小端字节序,用下面的公式转成值。


= buf[offset+1] * 256 + buf[offset];
  

32位整数的求值公式也是一样的。


/* 大端字节序 */
i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);

/* 小端字节序 */
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
  

(完)

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

理解字节序 的相关文章

  • 纯C++实现的HTTP请求(POST/GET)

    纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0c 进行简单的封装 xff0c 方便调用 实现如下 xff1a include 34 HttpConnect
  • python subprocess执行shell命令

    2019独角兽企业重金招聘Python工程师标准 gt gt gt subprocess的目的就是启动一个新的进程并且与之通信 subprocess模块中只定义了一个类 Popen 可以使用Popen来创建进程 xff0c 并与进程进行复杂
  • HDTV片源

    微软的 点击进入 苹果 quicktime下载 点击进入 国内一个网站 不过收费 电击进入 还有思路 转载于 https blog 51cto com wangjian 1420
  • Onvif鉴权实现方式

    Onvif鉴权实现方式 Digest 61 B64ENCODE SHA1 B64DECODE Nonce 43 Date 43 Password gsoap中digest生成代码 xff1a int soap wsse add Userna
  • 一文搞定Java并发编程面试考点

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 在java中守护线程和本地线程区别 xff1f java中的线程分为两种 xff1a 守护线程 xff08 Daemon xff09 和用户线程 xff08 User
  • 数据结构c语言版创建链表实验报告,C语言数据结构-创建链表的四种方法

    结点类型 xff1a typedef int datatype typedef struct NODE datatype data struct NODE next Node LinkList 1 不带头结点的头插入法创建链表 每创建一个结
  • syslog-ng

    syslog ng配置 March 13th 2012 绚丽也尘埃 Leave a comment Go to comments syslog ng的配置非常简单直观 xff0c 于是乎配置好看看怎么用它实时收集日志 有两台服务器 xff0
  • CMAKE总结(1) .lib .dll .a .so libx.dll libx.dll.a

    2019独角兽企业重金招聘Python工程师标准 gt gt gt win 对应 linux lib a dll 注 so 注 xff1a win中若使用 dll需要一个附带的引入库 lib win gcc中若使用 dll需要一个附带的因入
  • curl命令详解

    cURL 1 手册页 名称 cURL transfer a URL 摘要 cURL 选项 URL 描述 cURL 是一个向服务器或从服务器传输数据的工具 xff0c 它支持HTTP HTTPS FTP FTPS SCP SFTP TFTP
  • curl命令常见用法汇总 good

    curl是一种命令行工具 xff0c 作用是发出网络请求 xff0c 然后得到和提取数据 xff0c 显示在 34 标准输出 34 xff08 stdout xff09 上面 curl是一个强大的命令行工具 xff0c 它可以通过网络将信息
  • Linux编程之select

    select系统调用的的用途是 xff1a 在一段指定的时间内 xff0c 监听用户感兴趣的文件描述符上可读 可写和异常等事件 select 机制的优势 为什么会出现select模型 xff1f 先看一下下面的这句代码 xff1a int
  • DIGEST认证

    为了弥补BASIC认证存在的弱点 xff0c 从HTTP 1 1起就有了DIGEST认证 DIGEST认证同样使用质询 响应的方式 xff08 challenge response xff09 但不会像BASIC认证那样直接发送明文密码 所
  • Linux下搭建一个简单的UDP通信

    基础知识 UDP和TCP的区别 xff1a 1 TCP是面向连接的 xff0c 而UDP是非面向连接的 xff0c 因此TCP更可靠 2 UDP的server端的socket不需要监听 3 二者的server端都需要绑定 代码实现 xff1
  • 四轴飞行器PID调试一周总结

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Arduino 43 XXD 电调 43 1000KV电机 使用PID来调节稳定性 xff0c 今天上午终于调节 x y轴稳定 回想遇到的问题 xff0c 真的是试出来的值
  • 服务器机柜组件是,网络型机柜与服务器型机柜有什么区别

    导读 随着计算机与网络技术的发展 xff0c 服务器以及网络通信设备等IT设备正在向小型化 网络化 机架化的方向发展 xff0c 那么机房对于机柜管理的需求也就日益增长了 那么 xff0c 你们可知网络型机柜与服务器型机柜有什么区别吗 xf
  • live2d模型_使用二次元模型动画人物让自己网站“骚起来”

    预览 直接使用 xff0c 不想将模型或者js文件放到自己的CDN xff0c 则直接按照下面的步骤 下面的地址是我自己的github地址仓库 xff0c 文件一般不会删除 xff0c 直接引入链接即可 node项目 安装需要的js npm
  • 【http】发送POST请求小例子

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 一 HTTP是什么 xff1f 二 使用步骤 一 HTTP是什么 xff1f 请求行 xff08 request line xf
  • python多线程爬取某网站全部h漫画_Python多线程爬虫爬取网页图片

    39 39 39 基于多页面多线程 39 39 39 import os 引入文件模块 import re 正则表达式 importurllib requestimportthreading 连接网页并返回源码 defopen url ur
  • python获取图片像素矩阵_用python处理图片实现图像中的像素访问

    这篇文章主要介绍了关于用python处理图片实现图像中的像素访问 xff0c 有着一定的参考价值 xff0c 现在分享给大家 xff0c 有需要的朋友可以参考一下 前面的一些例子中 xff0c 我们都是利用Image open 来打开一幅图
  • 通信upf是什么意思_管理UPF的方法、装置及系统与流程

    本发明涉及通信领域 xff0c 具体而言 xff0c 涉及一种管理UPF 用户面功能 xff0c User plane function 的方法 装置及系统 背景技术 xff1a 图1是根据相关技术的3GPP演进分组系统的结构示意图 xff

随机推荐

  • signature=eb47f6441363b915ee5eb8456d7928a2,yarn.lock

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 abbrev 64 1 version 34 1 1 1 34 resolved 3
  • 绝地求生现在服务器稳定吗,吃鸡服务器不稳定?《绝地求生》国服宣布将首次使用超性能服务器...

    2月26日消息 要说目前最受国内游戏爱好者期待的游戏 xff0c 相信不少小伙伴都会投火遍全球的 绝地求生 一票 xff01 而据最新消息显示 xff0c 为了给玩家们带来更加优秀的游戏体验 xff0c 绝地求生 国服将首次使用超性能服务器
  • 微信服务器是否记录视频信息,微信视频号有访客记录吗 微信视频号可以查看浏览记录吗...

    视频号是微信的一个全新版块 xff0c 我们可以在视频号浏览视频号发布的短视频 xff0c 同时还可以进行点赞 留言 转发等操作 xff0c 那我们自行发布的视频 xff0c 微信视频号有访客记录吗 xff1f 下面就和IT百科一起来看看吧
  • 萨克斯维修服务器,萨克斯常见故障修理方法

    原标题 xff1a 萨克斯常见故障修理方法 1 如果某一按键突然停止工作了 xff0c 那就检测一下相应的弹簧 xff0c 如果是破裂或是遗失 xff0c 可以暂时用硬橡胶带来代替 记住在演奏完毕后要除去橡胶带 xff0c 因为从长远来看它
  • I2C通讯协议介绍

    2019独角兽企业重金招聘Python工程师标准 gt gt gt I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线 具有引脚少 xff0c 硬件实现简单 xff0c 可扩展性强的优点 I2C总线的另一优点是支持多主控 xf
  • postman linux 使用教程,Postman 的实用功能

    封面图 前言 基础使用 Collection Environment Test Collection Runner 参考资料 关于我 前言 我是一个 Android 开发工程师 xff0c 日常开发中最免不了的就是使用 Postman 进行
  • UART和RS232、RS485的基础知识

    博客目录 xff1a 1 UART和RS232 RS485的关系 xff1a 2 RS232和RS485的区别和引脚介绍 3 参考文献 正文如下 一 UART和RS232 RS485的关系 xff1a 通讯问题 xff0c 和交通是一样的
  • C语言截取字符串

    1 从左边截取指定长度的字符串 代码功能 xff1a 从字符串开头 xff0c 截取指定长度的字符 include lt stdio h gt include lt wiringPi h gt int main char arr 128 6
  • 【Android-3】Android中的任务栈(Task)

    一 Android任务栈 概述 xff1a Android中的任务栈其实就是Activity的集合 xff0c 在Android中退出程序的时候必须把任务栈中的所有Activity清除出栈 xff0c 此时才能安全的完全的退出程序 xff0
  • Boost 和 STL 相比有哪些优势和劣势?

    1 在设计原则上 xff0c STL和Boost大体统一 因为STL和Boost基本上都是标准委员会那批人在策划 审核和维护 xff0c 所以口味上是相对接近的 但是因为Boost并不在标准中 xff0c 或者说是下一代标准的试验场 xff
  • udp通信 c 语言,Windows程序设计 | 基于UDP的C/S通讯实现

    作者小序 今天翘课一天 xff0c 本打算一个早上写完网络编程实验报告就出去溜达 xff0c 结果从早上九点到这会没出过宿舍门 xff0c 宅到不能再宅了 xff0c 哎 xff0c 一首凉凉送给自己 分享一下干货吧 xff0c windo
  • Linux 下tcp编程例子

    服务器端server程序 编译命令 xff1a gcc Wall g o server server c lpthread include lt stdio h gt include lt string h gt include lt st
  • 微信开发者工具配置服务器信息,微信开发者中心如何配置

    微信开发者中心配置是怎么样的呢 xff0c 那么微信开发者中心又是如何配置的呢 下面是学习啦小编收集整理的微信开发者中心如何配置 xff0c 希望对大家有帮助 微信开发者中心配置的方法 工具 原料 一台电脑和一个微信公众号 需要再SEA上部
  • 【尖端干货】H.264编码下直播视频添加水印的优化

    2016年被称为 中国网络直播元年 xff0c 网络直播已成为网络文化领域重要的经营模式和文化市场的重要组成部分 而以 直播造人 事件为节点 xff0c 直播行业进入了严格规范化的时期 xff0c 鉴黄 版权保护越来越受到直播行业的关注 在
  • C++ 防止重定义

    防止重定义有2种方法 xff1a 第一种 xff1a ifndef MY HEAD H INCLUDED define MY HEAD H INCLUDED endif MY HEAD H INCLUDED 此种方案是一种很通用的方案 xf
  • 51单片机串口通讯c语言程序,如何使用51单片机实现串口通信

    描述 STC51单片机一般带有1个串口 xff0c 有的带有2个串口 xff0c 串口一般用于下载程序和串口通信 串口通信特别适合控制设备 xff0c 所以工控机的电脑上一般都带有串口 51单片机的串口引脚为P3 0引脚与P3 1引脚 xf
  • nautilus命令

    nautilus 是图形程式 效果是以当前用户打开图形界面 所以如果想以root打开图形界面 使用时记得先切为root xff0c sudo没有用的 转载于 https www cnblogs com wangshaowei p 90313
  • 如何在SV中使用结构体struct语法

    前言 测试下可综合的struct xff0c struct和interface的区别 xff1a 两者都可以是信号的组合 xff0c 但interface可以定义信号的不同方向 xff0c 而struct中的所有信号都是同向的 struct
  • http digest

    HTTP digest 摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法 它在密码发出前 xff0c 先对其应用哈希函数 xff0c 这相对于HTTP基本认证发送明文而言 xff0c 更安全 从技术上讲 xff
  • 理解字节序

    1 计算机硬件有两种储存数据的方式 xff1a 大端字节序 xff08 big endian xff09 和小端字节序 xff08 little endian xff09 举例来说 xff0c 数值0x2211使用两个字节储存 xff1a