首页 > 其他分享 >大小端(网络字节序)等概念

大小端(网络字节序)等概念

时间:2023-03-08 11:14:52浏览次数:35  
标签:小端 字节 网络 模式 概念 地址 内存 高字节

大端存储模式:是指数据的低字节保存在内存的高地址位,而数据的高字节保存在内存的低地址位。

小端存储模式:是指数据的低字节保存在内存的低地址,而数据的高字节保存在内存的高地址位。

例如存放0x0001在CPU内存中的存放方式(假设从地址0x4000开始存放)为:

  0x0001   高字节《——————低字节

                低地址   ——————》高地址

内存地址        0x4000        0x4001
存储内容(大端)        0x00        0x01
存储内容(小端)        0x01          0x00

 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储的模式有点儿类似于把数据当作字符串顺序来处理:地址由小到大增加,高数据是高位向地位放。

小端模式:是指数据的低字节保存在内存的低地址中,数据的高字节在内存的高地址中。

2.为什么会有大小端之分

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是C语言中除了8bit的char之外,还有16bit的short型(要看具体编译器),另外,对于位数大于位的处理器,例如16为或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就就导致了大端模式和小端模式。

例如一个16bit的short型。在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,0x11存放低地址中,0x22存放在高地址中,小端模式,是正好相反。

我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的·ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

 

 

从图中可以看出a在计算中存储的是以补码的形式,但是顺序确是倒放着的,这是继就是小端模式。

程序中一个变量的地址是指这个变量的起始地址,也就是低地址。例如4字节的int型变量的地址就是变量的起始地址,即这4字节变量对应的地址空间中的最低地址。

网络字节序

程序中一个变量的的地址是指这个变量的起始地址,也就是低地址。例如4字节int型变量的地址就是变量中的起始地址,即这4字节地址空间中的最低地址。

而网络发送时,是从起始地址开始操作处理变量数据的,因此会先传输变量的低地址数据,后传输高地址数据。

网络上传输数据的字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高地址字节还是地位字节处理,是一个比较有意义的问题:

UDP/TCP/IP协议规定,把接收到的第一个字节当作高字节来看待,这就要求发送端发送的第一个字节是高位字节,而在发送段发送数据时,发送的第一个字节时该数值在内存的起始地址对应的哪个字节,也就是说,该数值在内存中起始地址对应的哪个字节就是要发送的一个高位字节(即高位字节存放在低地址中,低位字节高地址中);由此可见,多字节数值在发送之前,在内存中因该时大端法方式进行存放的。

所以说网络字节序是大端字节序,在实际中,当在两个存储方式不同的主机上传输时,需要借助字节序转换函数

 

 

 

 

 

 

    

 

标签:小端,字节,网络,模式,概念,地址,内存,高字节
From: https://www.cnblogs.com/lihongbing1997-1004/p/17191190.html

相关文章

  • js 判断字节流是否可以按照utf8编码转成字符串
    下面的代码是我网上找的其他语言的实现方式改的js版本的,原版本的地址找不见了,但是我们还是要先感谢下原版本的作者不同于原版本,因为UTF8兼容ASCII,纯ASCII字节流也能用utf8......
  • 计算机网络之网络层
    网络层网络层提供了虚电路服务和数据报服务。两者的区别:1.虚电路服务需要先建立连接,但数据报服务不用2.虚电路服务会保证通讯的可靠性,但是数据报服务不会3.虚电路服务同......
  • blob((binary large object),二进制大对象)转化字节流下载附件
    Byte[]blob=null; FileStreamfs=null; conststringsConn="server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password"; try{ SqlConnecti......
  • 数据仓库基本概念
    数仓分层都分哪些层?一般来说,数据仓库我们可以分为如下5层:关于数仓分层,不同的公司分的层数是不一样的,并且数仓的每一层的命名也没有一个统一的标准,比如这一层就叫这个名......
  • (转)Golang网络开发系列(二)—— net包
    原文:https://zhuanlan.zhihu.com/p/575280551这篇文章我们将开始学习net包。因为我们大多是从net.Listen开始写一个tcpserver的,这篇文章我们就从上到下去分析,直到遇到int......
  • (转)GO的网络编程分享
    原文:https://learnku.com/articles/57947开始socket编程先上一张图,我们一起瞅瞅Socket是应用层与TCP/IP协议族通信的中间软件抽象层在设计模式中,Socket其实就是一......
  • Storm 概念与架构
    Storm提出了几个新的概念,理解这些概念对于学习Storm非常重要。Storm中核心概念如下:1)Tuple:由一组可序列化的元素构成,每个元素可以是任意类型,包括Java原生类型、String、byte[......
  • 网络程序设计-1
    实验一实验要求:脑筋急转弯1.0版编程要求:1.服务器出5~10道脑筋急转弯题目,客户机回答。服务器要能判断客户机回答的正确与否。2.服务器和客户机均采取java控制台编程模......
  • 汉源高科4路百兆网络带1路双向485数据通讯转光纤收发器网口光端机红绿灯控制光端机
    ......
  • VMware 16 Pro CentOS 7 网络配置
    一、虚拟机Nat模式和桥接模式区别NAT模式1.NAT网络连接形式,内部的虚拟机ip地址必须是前三位和NAT保持一致,才会连接外网。2.NAT模式下的多个虚拟机是可以互通的。3.NAT......