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

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

相关文章

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联