677-大端模式和小端模式详解

article/2025/9/24 22:20:10

1、大端和小端核心是什么?

大端模式和小端是实际的字节顺序和存储的地址顺序对应关系的两种模式,总结如下:
大端模式:低地址对应高字节
小端模式:低地址对应低字节

不管是大端还是小端模式,我们在读取和存储数据的时候一定都是从内存的低地址依次向高地址读取或写入。

2、什么是存储顺序?

打个比方,我们定义一个数组,char array[5] = {0,1,2,3,4};
数组存储的内存分布如下:
在这里插入图片描述
不管是写还是读,我们都是只要根据这个首地址就能找到我们想要的元素内容,从这一点上讲,在存储的时候,我们依次去存储0、1、2、3、4。在读取的时候,我们也是从array[0]开始,依次读取0、1、2、3、4。

3、大端模式向小端模式发送数据

有了数据按照字节依次由低往高读取或存储这个前提,下面举例说明大端和小端的区别。
假设A要发送四字节的数据给B,
A的存储是按照大端模式,B的存储模式为小端模式。
A的存储1234内存分布如下图
在这里插入图片描述
因为A存储是按照大端模式,依据低地址对应高字节的规律,那么A要发送值int Value_A = 0x12345678。

Value_A将会由低地址依次发送给B,这里为什么是低地址,因为发送的开始,就是去读取数据,读取数据一定是从低地址开始读取得,那么B依次接收的值为0x12,0x34,0x560,x78。

B将接收到的值存储在如下图的内存中,存储的时候也是按照低地址往高地址开始依次存储
在这里插入图片描述
B接收完毕后,需要将内存中的值读取到Value_B中来,那么Value_B的值是多少呢?
B的存储是按照小端模式存储,低地址对应的低字节,那么int Value_B = 0x78563412
这里可能很多人会有疑问?不是读取是按照低地址从高地址依次读取的吗?为什么相同的存储,读出来的值却不一样了?

这里就是关键了。在读取0x12出来后,系统设定的模式是低地址对应低字节,我们的Value_B是int类型,是四个字节的数据,展示在我们面前的数据,一定是从左到右字节的顺序依次降低的,所以将0x12放在最低的字节,如下图。
在这里插入图片描述
即Value_B = 0x78563412;
Value_A 不等于Value_B,这就是为什么我们在网络通信的时候一定要进行字节序和确认了,必须保证A和B的字节序相同,如果不同,就需要使用字节序的转换函数。

4、字节序转换函数

1、htons 把unsigned short类型从主机序转换到网络序(host to network short)
2、htonl 把unsigned long类型从主机序转换到网络序(host to network long)
3、ntohs 把unsigned short类型从网络序转换到主机序(network to host short)
4、ntohl 把unsigned long类型从网络序转换到主机序(network to host long)

主机字节序一般都是小端(绝大多数,少部分也是大端存储的),网络字节序是大端存储的。

小端转大端方法1

UINT32  LE2BE(UINT8* dat, UINT8   len)
{UINT32  temp = 0, fact = 1;UINT8     i = 0;for (i = 0; i < len; i++){temp += dat[i] * fact;fact *= 256;}return temp;
}

这段程序是什么意思呢?
我们还是举例说明。
在上面的案例中,如果B要给A发送int test_B = 0x12345678,B的存储就是小端模式,B要将0x12345678正确的发送给A,那么按照上面的发送和接收,A是不会接收到0x12345678的。
A会依次接收到0x78,0x56,0x34,0x12,不经过转换,低地址对应高字节,test_A = 0x78563412。
这里就需要按照上面进行转换。
上面的程序意图如下:

temp = 0x78*1 + 0x56*256 + 0x34 * 256*256 + 0x12*256*256*256= 120+22016+3407872+301989888= 305419896= 0x12345678

经过转换,A获取的值就是temp值,也就是B传送过来的值了。
看到这里,就算是把大端和小端的问题说明白了,实际上的问题核心就是一个是字节顺序,一个存储顺序。

小端转大端方法2

#include <stdio.h>union endian//共用体(联合体)
{char a[4];int b;
}big;//把int类型数据从小端序转成大端序
int big_endian(int n)
{char temp;big.b = n;//第1字节与第4字节交换temp = big.a[0];big.a[0] = big.a[3];big.a[3] = temp;//第2字节与第3字节交换temp = big.a[1];big.a[1] = big.a[2];big.a[2] = temp;return big.b;
}void main()
{int n = 0x12345678;printf("小端序:%#x\n", n);n = big_endian(n);printf("大端序:%#x\n", n);
}

小端转大端方法3

#include <stdio.h>//把int类型数据从小端序转成大端序
void main()
{int n=0x12345678;char *p=(char *)&n;printf("小端序:%#x\n",n);n=(*p)<<24|(*(p+1))<<16|(*(p+2))<<8|(*(p+3));printf("大端序:%#x\n",n);
}

如何判断机器的字节序1

#include <stdio.h>
int main (void)
{union{short i;char a[2];}u;u.a[0] = 0x11;u.a[1] = 0x22;printf ("0x%x\n", u.i);  //0x2211 为小端  0x1122 为大端return 0;
}
输出结果:
0x2211

union 型数据所占的空间等于其最大的成员所占的空间。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始,也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。
联合是一个在同一个存储空间里存储不同类型数据的数据类型。这些存储区的地址都是一样的,联合里不同存储区的内存是重叠的,修改了任何一个其他的会受影响。

如何判断机器的字节序2

在这里插入图片描述

如何判断机器的字节序3

在这里插入图片描述


http://chatgpt.dhexx.cn/article/EoSiRruN.shtml

相关文章

大端小端详解

转载&#xff1a;大端小端详解 1>"大端" "小端"的来源 关于大端小端名词的由来&#xff0c;网传有一个有趣的故事&#xff0c;可以追溯到1726年的Jonathan Swift的《格列佛游记》&#xff0c;其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端…

大端序发送数据

需要发送数字 151510 大端序发送就是 &#xff1a;00 02 4F D6 string smallData textBox1.Text;//小端数据if (smallData ""){MessageBox.Show("请输入初始里程", "错误",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);textBox1.Text …

c语言之大端小端问题

这就是字节序问题&#xff1a;数据在计算机内存中存储或者网络传输时各字节的存储顺序 通常来说就分为两种情况&#xff1a; 一种是大端(big-endian)&#xff1a;高字节(高位)存放在低地址&#xff0c;低字节(低位)存在高地址 另外一种小端(little-endian)&#xff1a;高位存放…

数据存储:大端小端

文章目录 问题起源大端小端大端小端优劣符合人类阅读方式数据类型转换符号位的识别 参考资料 曾经辨析和了解过大端小端&#xff0c;但是到了实际应用中还是比较模糊。整理一些资料文章&#xff0c;在此记录。 问题起源 在计算机的使用以及现代很多的嵌入式设备中&#xff0c;…

大端与小端

一.大小端介绍 “大端”和“小端”表示多字节值的哪一端存储在该值的起始地址处。小端存储在起始地址处&#xff0c;即是小短字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节序。 大端存储模式&#xff1a;数据的低位保存在内存中的高地址中&#xff0c;数据…

大端和小端的含义及判断代码

1、概述 在计算机系统中&#xff0c;数据都是以字节进行存储的&#xff0c;每个地址单元对应一个字节&#xff0c;每个字节都是8位&#xff08;bit&#xff09;。但是C除了char和bool之外&#xff0c;还有其它多字节类型。怎样存储多字节的数据就分为了大端和小端。字节序只和…

C语言基础 —大端和小端

大端和小端 1、什么是大端和小端2、为什么会有大端和小端3、怎样判断是大端还是小端 1、什么是大端和小端 大端模式&#xff1a;就是 高位字节 存放在内存的 低地址端&#xff0c;低位字节 存放在内存的 高地址端 小端模式&#xff1a;就是 低字节存 放在内存的 低地址端&…

大端和小端的区别和判断

1.概念 大端模式(big endian)&#xff1a;数据的高位字节保存在内存的低地址中&#xff0c;而低位字节保存在内存的高地址中。 小端模式(little endian)&#xff1a;数据的高位字节保存在内存的高地址中&#xff0c;而低位字节保存在内存的低地址中。 问&#xff1a;什么是高…

什么是大端和小端

大端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的高地址中&#xff0c;而数据的高位保存在低地址中&#xff1b; 小端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的低地址中&#xff0c;而数据的高位保存在高地址中。 …

大端、小端的前世今生

什么是大端、小端&#xff1f; BigEndian(大端)&#xff1a;低字节在高内存地址 LittleEndian(小端)&#xff1a;低字节在低内存地址 所谓大端小端&#xff0c;也就是看低字节在高内存地址还是低内存地址&#xff0c;也就是看低字节在前还是高字节在前&#xff0c;低字节在前…

数据存储:小端模式和大端模式——终于搞明白了!!!

首先要记住&#xff1a;读数据永远是从低地址开始的&#xff01;&#xff01;&#xff01; 正文开始 什么是低地址、高地址&#xff1f; 地址编号小的是低地址&#xff0c;地址编号大的是高地址 什么是数据的低位、高位&#xff1f; 小端模式 数据的低位放在低地址空间&am…

室内定位技术(三)——自有定位技术

我们正在使用的技术是以wifi信号强度正态分布为核心&#xff0c;结合神经网络原理的一套完整算法&#xff0c;并对wifi信号的正态分布情况作了很多的优化工作。 以下是在两组wifi信号强度正态分布研究的实例图&#xff1a; 四条不同颜色的线分别代表不同的ap信号强度的正态分布…

室内定位浅析

这一星期都在弄室内定位的事情&#xff0c;关于室内定位。需求就是两个终端之间&#xff0c;能够快速地通过室内定位做出路线规划&#xff0c;进行导航。 这个精确的室内定位路线规划得益于WIFI的精确部署。 先开看看这个WiFi的理论部署模型。 等边三角形的三个顶点作为三个无…

物联网之室内定位

摘要&#xff1a;室内定位正处于百家争鸣、技术爆发的阶段&#xff0c;尤其近年随着UWB、Wi-Fi以及5G等通信技术的广泛应用。 1、定位需求 物联网时代&#xff0c;位置服务已成为人们工作生活必不可少的服务之一&#xff0c;网约车、外卖、导航等都依赖定位服务。这些最常用的…

室内定位关键技术(indoor location)

一、Wi-Fi定位 Wi-Fi定位是目前相对成熟且应用广泛的定位技术&#xff0c;定位方法是基于信号强度的传播模型法和指纹识别法。信号强度的传播模型法&#xff0c;是指使用当前环境下假设的某种信道衰落模型&#xff0c;根据其数学关系估计终端与已知位置 AP 间的距离&#xff0c…

室内定位——UWB测距及定位原理

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;平行机器人 整理&#xff1a;李肖遥 我们都知道卫星信号在室内会被严重影响&#xff0c;从而导致GPS或是北斗无法定位。所以在室内定位主要采用无线通讯、基站定位、惯导定位等多种技术集成形成一套室内位置定位系统…

【可见光室内定位】(一)概览

目录 一、室内无线定位技术概况二、研究现状三、应用前景背景 一、室内无线定位技术概况 二、研究现状 得益于可见光通信&#xff08;&#xff36;&#xff2c;&#xff23;&#xff09;技术的迅速发展&#xff0c;可 见光定位&#xff08;&#xff36;&#xff2c;&#xff…

室外定位靠卫星 室内定位又如何?

人类为了不让自己迷失在茫茫大自然中&#xff0c;先后发明罗盘、指南针等工具&#xff0c;卫星定位的问世&#xff0c;解决了“我在哪里”的问题。 如今物联网是“信息化”时代的重要发展阶段&#xff0c;随着社会信息化水平的普遍提高&#xff0c;其社会的重要性日益显现。 云…

室内定位之5G定位

目录 一、前言 二、蜂窝网 三、5G引入哪些技术 五、5G室内定位研究现状 六、5G室内CSI指纹定位 七、5G室内定位的未来 一、前言 随着5G通信基础设施逐步完善&#xff0c;5G网络的优势一方面在于其具有的更大的带宽和子载波间隔&#xff0c;使得5G室内定位精度提升(3.5GH…

室内定位——视觉方法的发展

转载自&#xff1a;室内定位——从入门到出家&#xff08;二&#xff0c;视觉&#xff09; 作者其他文章&#xff1a; 室内定位——从入门到出家&#xff08;一&#xff09; 室内定位——从入门到出家&#xff08;三&#xff0c;近红外&#xff09; 室内定位——从入门到出家&a…