大端与小端

article/2025/9/25 0:02:51

一.大小端介绍

“大端”和“小端”表示多字节值的哪一端存储在该值的起始地址处。小端存储在起始地址处,即是小短字节序;大端存储在起始地址处,即是大端字节序。

大端存储模式:数据的低位保存在内存中的高地址中,数据的高位保存在内存中的低地址中;
小端存储模式:数据的低位保存在内存中的低地址中,数据的高位保存在内存中的高地址中;(STM32属于小端模式)

常用的x86结构是小端模式,而keil C51则为大端模式,很多的arm、dsp都为小端模式,有些arm处理器还可以由硬件来选择是大端模式还是小端模式。

int a=1;//一个int占4字节

在这里插入图片描述

二.为什么会有大小端存储模式

1.cpu和编译器不同

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

2.网络字节序

网络上传输的数据都是字节流。对于一个多字节数值,在进行网络传输的时候,先传递哪个字节,也就是说,当接收端收到第一个字节的时候,它将这个字节作为高字节还是低字节来处理,是一个比较又意义的问题。
UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节,而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高位字节。由此可见,多字节数值在发送之前,在内存中是以大端法存放的。所以说,网络字节序是大端字节序。

三.如何判断CPU使用大端存储还是小端存储

1.类型降低

#include<stdio.h>int main(void)
{short int  a = 0x1234;unsigned char b=a;printf("%xH\n",b);//34H}

2.使用指针,类型强转

#include<stdio.h>
int main(void)
{short a = 0xff00;char* b = (char*)&a;if (*b == 0xff){printf( "大端");}else{printf( "小端");}return 0;
}

3.采用共用体

#include<stdio.h>
int checkCPU()
{union w{int a;char b;}c;c.a = 1;return (c.b == 1);
}
int main(void)
{if (checkCPU())printf("小端\n");elseprintf("大端\n");
}

联合体union的存放顺序是所有成员都从低地址开始存放。如果处理器是大端存储模式,则c.b=0,checkCPU()函数返回0。

四.应用实列

#include<stdio.h>int main(void)
{//sizeof(unsigned short)=2//sizeof(struct mybitfields)=2//sizeof(short)=2//sizeof(test)=2struct mybitfields{unsigned short a:4;unsigned short b:5;unsigned short c:7;};struct mybitfields test;int i;test.a = 2;test.b = 3;test.c = 0;i = *((short  *)&test);printf("%d\n",i);return 0;}

上例的声明方式是把一个short(也就是一块16位内存)分成三部分,各部分的大小分别是4位、5位、7位,赋值语句i = *((short *)&test);就是把上面的16位内存转换成short类型进行解释。变量a的二进制表示为0000000000000010,取其低四位是0010;变量b的二进制表示为0000000000000011,取其低五位是00011;变量c的二进制表示为0000000000000000,取其低七位是0000000。所以合成后得到0000000000110010,即十进制50。

五.如何进行大小端的转换

#include<stdio.h>//int型
int swapInt32(int intvalue)
{int temp = 0;temp = ((intvalue & 0x000000FF) << 24)|((intvalue & 0x0000FF00) << 8) |((intvalue & 0x00FF0000) >> 8) |((intvalue & 0xFF000000) >> 24) ;return temp;
}//unsigned short型
unsigned short swapshort16(unsigned short shortvalue)
{return ((shortvalue & 0x00FF) << 8) | ((shortvalue & 0xFF00) >> 8);}//float型
float swapfloat32(float floatvalue)
{typedef union SWAP_UNION{float unionFloat;int unionInt;}SWAP_UNION;SWAP_UNION swapUnion;swapUnion.unionFloat = floatvalue;swapUnion.unionInt=swapInt32(swapUnion.unionInt);}//double型
void swapdouble64(unsigned char * pin , unsigned char *pout)
{for (int i=0; i < 8; i++ ){pout[7-i] = pin[i];}
}
int main(void)
{unsigned short x=0x12;unsigned short y=swapshort16(x);printf("%xH\r\n",y);return 0;
}
1001 1101 1101 1001//40409D

调用swapshort16()转换成

1101 1001 1001 1101//55709D

六.绝对地址相关

1.对绝对地址赋值

*unsigned int *0x100000 = 1234;

2.让程序跳转到绝对地址0x100000去执行

2.1 将0x100000强制转换成函数指针

( void (*)() )0x100000

2.2 再调用它

* ( ( void (*)() )0x100000 ) ();

用typedef可以更直观些

typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();

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

相关文章

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

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…

室内定位

室内定位调研 1.蓝牙定位 1&#xff09;背景 蓝牙室内技术是利用在室内安装的若干个蓝牙局域网接入点&#xff0c;把网络维持成基于多用户的基础网络连接模式&#xff0c;并保证蓝牙局域网接入点始终是这个微微网(piconet)的主设备&#xff0c;然后通过测量信号强度对新加入的…

聊聊室内定位技术

目前&#xff0c;定位技术已经非常发达&#xff0c;GPS/北斗等卫星定位、手机基站定位应用都非常广泛。但也都有其局限性&#xff0c;卫星定位只能应用于空旷地方&#xff0c;基站定位只能应用于信号好的地方&#xff0c;且定位精度较低。而室内定位正好弥补了两者的不足。 室内…

室内定位白皮书

3 室内定位技术原理介绍 目前&#xff0c;室内定位技术众多&#xff0c;考虑到市场应用普及性及技术应用前景&#xff0c;本章将从定位原理、定位方式及性能、产业链支持情况以及产业痛点分析这些维度&#xff0c;分析介绍 5G 基站定位、4G 基站定位、蓝牙 4.2定位、蓝牙 5.1 …

室内定位简介

室内定位定义&#xff1a; 室内定位是指在室内环境中实现位置定位&#xff0c;主要采用无线通讯、基站定位、惯导定位等多种技术集成形成一套室内位置定位体系&#xff0c;从而实现人员、物体等在室内空间中的位置监控。 室内定位需求&#xff1a; 在室外环境&#xf…

基于WiFi的室内定位

摘要 GPS难以解决室内环境下的一些定位问题&#xff0c;大部分室内环境下都存在WiFi&#xff0c;因此利用WiFi进行定位无需额外部署硬件设备&#xff0c;是一个非常节省成本的方法。然而WiFi并不是专门为定位而设计的&#xff0c;传统的基于时间和角度的定位方法并不适用于WiFi…