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

article/2025/9/25 0:00:33

1、概述

在计算机系统中,数据都是以字节进行存储的,每个地址单元对应一个字节,每个字节都是8位(bit)。但是C++除了char和bool之外,还有其它多字节类型。怎样存储多字节的数据就分为了大端和小端。字节序只和使用的处理器架构有关,和编程语言无关,常见的Intel系列是小端序。

2、大端和小端

大端模式(Big-endian):数据的高位字节保存在内存的低地址中,而数据的地位字节保存到内存的高地址中。这样的存储有点类似把数据当作字符串处理,和我们的阅读习惯一致。

小端模式(Little-endian):数据的高位字节保存在内存的高地址中,而数据的高字节保存到内存的低地址中。

看概念总是让人记不住或者难以理解,让我们看看例子:

假设一个类型为int的变量x,x的首地址为0x100即&x的值为0x100。那么x的4个字节被存储在存储器的0x100,0x101,0x102,0x103的位置。x 的值为16进制 0x12345678。
在这里插入图片描述

数据是0x12345678,数据的高位是12,低位是78。
内存地址低位是0x100,高位是0x103。
对照上面的表格就很明白了。现在虽然理解了,但是概念有点像绕口令,很难让人记住,有人就说了一种另外的方法来记。

Big-endian = 高尾端:数据的尾端存在存储器的高地址。
Little-endian = 低尾端:数据的尾端存在存储器的低地址。

3、怎么判断计算机的字节序

使用union的方法判断:

#include<stdio.h>
#include<stdlib.h>int  main(int argc, char **argv)
{union{short  s;char   c[sizeof(short)];} un;un.s = 0x0102;if (sizeof(short) == 2){if (un.c[0] == 1 && un.c[1] == 2)printf("大端法\n");else if (un.c[0] == 2 && un.c[1] == 1)printf("小端法\n");elseprintf("不能判断\n");} elseprintf("sizeof(short) = %d\n", sizeof(short));exit(0);
}

其它方法:

int main(int argc, char** argv)
{short int x;char x0, x1;x = 0x1122;x0 = ((char*)&x)[0];x1 = ((char*)&x)[1];printf("x0=0x%x", x0); return 1;
}

若是0x=0x11,则是大端(高尾端)。若是0x=0x22则是小端(低尾端)。

4、对程序员有啥影响?

大多数情况下对写程序不会出影响,但在某些特殊情况下会成为问题:
1、编写网络程序时,主机之间通过网络相互通信,不同主机之间可能采用不用的存储方法,而且网络字节序和主机字节序也有可能不同。当小端法机器产生的数据被发送到大端法机器或者反方向发送时会发现接受程序子里面的字节成了反序的。为了避免这种情况的发生,规定网络应用程序在将数据发送之前现将数据转换称网络字节序,在接收主机那边,主机再将网络字节序的数据转换成适合本主机的主机字节序,从而避免了字节序异常。(网络字节序为大端法)

注意:这里其实只对数据类型有效,对于传送字符串时,char占用一个字节,所以传输之后的顺序是不会变的。

网络编程中常用的转换函数有如下几个:

uing16_t htons(uint16_t host16bitvalue);    // 参数为16位主机字节序的值,返回值是16位网络字节序的值uint32_t htonl(uint32_t host32bitvalue);    // 参数为32位主机字节序的值,返回值是32位网络字节序的值uint16_t ntohs(uint16_t net16bitvalue);     // 参数为16位网络字节序的值,返回值是16位主机字节序的值uint32_t ntohl(uint32_t net32bitvalue);     // 参数为16位网络字节序的值,返回值是16位主机字节序的值

2、当调试程序时常常需要将程序编译成汇编形式,当阅读汇编代码时数据的字节序很重要,需要根据自己的机器是大端法还是小端法来不同对待,以免搞错字节顺序。

3、当编写规避正常类型系统的程序时,在C语言中可以使用强制类型转换来允许以一中类型引用一个对象,而这种数据类型与创建这个对象时定义的数据类型不同,大多数应用编程都不推荐这种编码技巧,但是它们对于系统级编程来说十分有用。

感谢大家,我是假装很努力的YoungYangD(小羊)。

参考资料:
https://www.cnblogs.com/broglie/p/5645200.html


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

相关文章

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…

室内定位主页

前言 这个分类主要介绍室内定位的一些常用方法和基本知识。博主也是室内定位的纯小白&#xff0c;一点点摸索写的。安卓更是没接触过&#xff0c;希望我的一点点知识能解决你的一点问题。 RSSI定位学习 本章主要是博主一边学习一边写的&#xff0c;通过3个手机模拟三个IBeac…