大端序与小端序( 基本的浅见知识 )

2023-11-21 04:48

本文主要是介绍大端序与小端序( 基本的浅见知识 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    偶然看到大端序与小端序的知识,感觉还是很好玩的,呵呵~  ~  ~

   

    其实 大小端序是针对于不同的硬件而言的,具体的就是不同的CPU 是不同的处理的。 对于 Intel x86 系列就是小端序。

 

   下面具体介绍:

 

    简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关。

Big(大端序):

数据的高位字节存放在地址的低端 低位字节存放在地址高端

Little(小端序):

数据的高位字节存放在地址的高端 低位字节存放在地址低端

 

字节的高位与低位:


举个例子,int a =0x12345678 ; 那么左边12就是高位字节,右边的78就是低位字节,从左到右,由高到低,(注意,高低乃相对而言,比如56相对于78是高字节,相对于34是低字节 )


关于地址的高端与低端:
0x00000001              // 相对于下面三个是低端
0x00000002
0x00000003
0x00000004               //相对于上面三个是高端

 

字节序如何存储数据:

假设从地址 0x00000001 处开始存储十六进制数 0x52365670 

( 1.)对于大端而言:

 

                  0x00000001          // 储存52
                  0x00000002           //储存36
                  0x00000003           //储存56
                  0x00000004           //储存70

( 2.)对于小端而言:

 

                  0x00000001          // 储存70
                  0x00000002           //储存56
                  0x00000003           //储存36
                  0x00000004           //储存52

 

 

总结:大端序是按照数字的书写顺序进行存储的,而小端序是颠倒书写顺序进行存储的。


----------------------------------- 代码判断方法:-------------------------------------------------

 

bool isBig()
{
   
int a =1 ; 

    
   if( ( ( char *) &a )[3]== 1 // 标准的写法是将a[3]替换为a[sizeof( int) - 1]
    {

       return true ;

    }
   
else
    {

       return false ;

   }
}

 

打开VS的内存窗口,看一下a的存储方式,一目了然

 

大端序与小端序( <wbr>基本的浅见知识 <wbr>)
a是int,所以占四个字节,其值是00000001,存储方式如下:所以a[3]是0,不是大端序。

0x0012FE88  01         // a[0]

0x0012FE89  00         // a[1]

0x0012FE8A  00         // a[2]

0x0012FE8B  00         // a[3]

 

---->当然还有方法也是可以的:就是使用 “Union 

 

bool isBig()
{
union
{
unsigned
short a ;
char b ;
} c;

c.a
= 0x0102 ;

if (c.b == 1 )
{
return true ;
}
else
{
return false ;

这篇关于大端序与小端序( 基本的浅见知识 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399899

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作