C语言:大小端字节序存储

news2024/12/23 20:41:28

一、大小端字节序存储介绍

大端字节序存储模式:把一个数据低位字节处的数据存放在高地址处,数据高位字节处的数据存放在低地址处

小端字节序存储模式:把一个数据低位字节处的数据存放在低地址处,数据高位字节处的数据存放在高地址处

 

例如:

int a = 0x11223344

大端字节序存储:11 22 33 44

小段字节序存储:44 33 22 11

 

当前机器的存储模式是小段字节序存储,如下图内存1,a的地址是0x0000002EF2DEFB04

二、为什么要有大小端字节序存储模式之分

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


例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,
那么0x11为高字节,0x22为低字节。
对于大端模式,就将0x11放在低地址中,
即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式。
很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

三、小程序判断当前机器是大端存储还是小端存储

代码如下:

函数 check_sys() 

整型数据 x 的十六进制表示为 0x 00000001

若为大端存储:00 00 00 01

若为小端存储:01 00 00 00

每两位是一个字节,若要判断大小端则只要判断第一个字节是00还是01

那么如何只取一个字节呢?则只需要设置一个 char 型指针变量p,解引用时只会取一个字节

所以只需要判断 *p 是 0x00(十进制0) 大端,还是 0x01(十进制1) 小端

int check_sys()
{
    int x = 1;
    char* p = &x;

    if (*p == 0)
    {
        return 0;//大端
    }
    else
    {
        return 1;//小端
    }
}

int main()
{
    printf("%d\n", check_sys());
    return 0;
}

当前机器为小端字节序存储 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经管博士科研基础【12】包络定理

当我们知道一个函数的最优解时,我们要求解这一个函数的值函数关于函数中某一个参数的导数,那么就可以使用包络定理。 1. 无约束条件下的包络定理 函数在其极值点处对一个参数(参数不是自变量)取偏导数的结果,等价于这…

5G NR:RACH流程 -- Msg1发送时RA-RNTI的计算及功率控制

前言 如果阅读了这两篇博文《如何产生PRACH preamble》和《如何选择合适的时频资源发送preamble》,那么对msg1有了基本了解,但是真到了Msg1发送的时候,该怎么处理呢,这里涉及到两个问题: 问题1:发…

5、Spring之Bean生命周期源码解析(销毁)

Bean的销毁过程 Bean销毁是发送在Spring容器关闭过程中的。 在Spring容器关闭时,比如: AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); UserService userService = (UserService) context.getBean("userSe…

【CLIP详读】

个人网站:https://tianfeng.space 一、前言 OpenAI的CLIP项目自从推出以来,CLIP引起了广泛的关注。它的方法看似简单,但效果非常出色,许多结果令人惊叹。例如,预训练模型可以在任何视觉分类数据集上实现出色的效果&a…

python中super()用法

super关键字的用法 概述作用语法使用示例1.通过super() 来调用父类的__init__ 构造方法:2.通过supper() 来调用与子类同名的父类方法2.1 单继承2.2 多继承 概述 super() 是python 中调用父类(超类)的一种方法,在子类中可以通过su…

Zookeeper 入门

第 1 章 Zookeeper 入门 1.1概述 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将…

Keysight PXA 常用 visa指令

Keysight PXA N9030B 保存图片

栈和队列篇

目录 一、栈 1.栈的概念及结构 1.1栈的概念 1.2栈的结构示意图 2.栈的实现 2.1支持动态增长的栈的结构 2.2压栈(入栈) 2.3出栈 2.4支持动态增长的栈的代码实现 二、队列 1.队列的概念及结构 1.1队列的概念 1.2队列的结构示意图 2.队列的实…

指针(一)------指针概念+指针类型+野指针+指针运算+二级指针

💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 指针(一) 指针是什么指针…

剪枝基础与实战(5): 剪枝代码详解

对模型进行剪枝,我们只对有参数的层进行剪枝,我们基于BatchNorm2d对通道重要度 γ \gamma γ参数进行稀释训练。对BatchNorm2d及它的前后层也需要进行剪枝。主要针对有参数的层:Conv2d、BatchNorm2d、Linear。但是我们不会对Pool2d 层进行剪枝,因为Pool2d只用来做下采样,没…

MacApp自动化测试之常用工具简介

自动化测试在国内主要以单元测试、API测试、WebUI测试为主,对于MacApp测试却鲜有涉及。但2021年统计MacBook市场占有率接近10%,相比前一年市场占有率提升了26%,可见发展势头非常不错。 与此MacBook上的应用程序MacApp也在有序地发展着&#…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

解密Spring事务生效的内部机制

声明式事务和编程式事务对比: 声明式事务: 使用注解或XML配置的方式,在代码中声明事务的属性和行为。通过AOP和代理模式实现,将事务管理与业务逻辑代码解耦。适用于大多数情况,简化了代码,提高了可维护性和…

9.2作业

QT实现闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QDateTime> #include<QLineEdit> #include<QLabel> #include<QPushButton> #include <QTextToSpeech> QT_BEGIN_NAMES…

sqlserver 自定义函数汉字转拼音或首字母

作用&#xff1a; 将汉字生成为全拼音或者首字母&#xff0c;示例 执行自定义函数&#xff0c;将汉字转成对应的首字母 执行自定义函数&#xff0c;将汉字转成全拼音 自定义教程&#xff1a; 一&#xff0c;只取汉字的首字母 代码如下&#xff1a; 执行下面sql 就自定义函数了…

骨传导耳机对人有伤害吗?骨传导耳机和入耳式耳机的区别是什么?

如果是正确的使用骨传导耳机&#xff0c;是不会对人体造成伤害的&#xff0c;在人的耳蜗内有一种细胞很重要&#xff0c;叫做内毛细胞&#xff0c;主要的工作就是负责识别声音&#xff0c;我们能听到声音跟它密不可分&#xff0c;并且内毛细胞在收到损害后是不会自我修复的&…

go Session的实现(一)

〇、前言 众所周知&#xff0c;http协议是无状态的&#xff0c;这对于服务器确认是哪一个客户端在发请求是不可能的&#xff0c;因此为了能确认到&#xff0c;通常方法是让客户端发送请求时带上身份信息。容易想到的方法就是客户端在提交信息时&#xff0c;带上自己的账户和密…

论文阅读_扩散模型_DM

英文名称: Deep Unsupervised Learning using Nonequilibrium Thermodynamics 中文名称: 使用非平衡热力学原理的深度无监督学习 论文地址: http://arxiv.org/abs/1503.03585 代码地址: https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 时间: 2015-11-18 作…

Mqtt学习笔记--交叉编译移植(1)

简述 Mqtt目前在物联网行业的应用比较多&#xff0c;mqtt属于应用层的一个中间件&#xff0c;这个中间件实现消息的订阅发布机制。网上介绍Mqtt的实现原来的比较多&#xff0c;这里不细介绍。 其实在我们之前的产品中&#xff0c;自己也开发的有类似的中间件&#xff0c;除了具…

第 3 章 栈和队列 (算法 3.5,汉诺塔问题递归解法)

1. 背景说明 假设有 3 个分别命名为 X、Y 和 Z 的塔座&#xff0c;在塔座 X 上插有 n 个直径大小各不相同、依小到大编号为 1, 2&#xff0c;…&#xff0c;n 的圆盘。现要求将 X 轴上的 n 个圆 盘移至塔座 Z 上并仍按同样顺序叠排&#xff0c;圆盘移动时必须遵循下列规则&…