Linux之最简单判断系统大小端(二十四)

2024-05-08 01:08

本文主要是介绍Linux之最简单判断系统大小端(二十四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux之最简单判断系统大小端 

大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(CPU对操作数的存放方式是从高字节到低字节)
小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(CPU对操作数的存放方式是从低字节到高字节)#include<stdio.h>
int main()
{//小端模式:低地址存低字节//大端模式:低地址存高字节//int temp = 0x1234; //x=0x1234,占两个字节,0x12是高字节,0x34在低字节short temp = 0x1234; //x=0x1234,占两个字节,0x12(1byte)是高字节,0x34(1byte)在低字节char *p = (char *)&temp;printf("p[0] = %#x, p[1] = %#x\n",p[0], p[1]);printf("*p = %#x\n",*p);if(*p == 0x34)printf("小端模式\n");else if(*p == 0x12)printf("大端模式\n");return 0;
}

大小端定义:和我们从左到右阅读的习惯一致。 

低地址-------------------------------------------------------------->高地址


大端:高字节放在低地址。

大端模式下 0x11223344如何存放的:

  1           1           2          2            3          3              4         4

0001   0001     0010     0010       0011   0011        0100    0100

11:高位字节; 

44:低位字节。


小端:低字节放在低地址。

小端模式下 0x11223344如何存放的:

通过打印更清晰的认识其本质 

/*
大小端定义:和我们从左到右阅读的习惯一致。 
大端:高字节放在低地址。0x11223344 -> |0x11|0x22|0x33|0x44
小端:低字节放在低地址。0x11223344 -> |0x44|0x33|0x22|0x11
*/
#include<iostream>
using namespace std;int main() {union UN {int i;//union枚举类型,i和str其实是一片内存地址,内联un的首地址char str;//不管str定义位置,都会被放在前面底地址//i占4个byte,str占1个byte.内存分布:0000 0000 0000 0000} un;un.i=1;//小端内存分布:// int和char公用一个内存地址,占4个byte.// 0001 0000 0000 0000printf("un = %p, &str = %p, &i = %p\n",&un, &un.str,&un.i);printf("str = %d\n", un.str);//通过char*每次位移一个byte访问int的4个字节,看到数值1在什么位置存储printf("*un = %d, &un = %p\n", *((char*)&un),(char*)&un);printf("*un+1 = %d, &un+1 = %p\n", *((char*)&un+1),(char*)&un+1);printf("*un+2 = %d, &un+2 = %p\n", *((char*)&un+2),(char*)&un+2);printf("*un+3 = %d, &un+3 = %p\n\n", *((char*)&un+3),(char*)&un+3);int a = 3;char *p = ( char*)&a;//通过char*每次位移一个byte访问int的4个字节,看到数值3在什么位置存储printf("p = %d, &p = %p\n", *(p),p);printf("p+1 = %d, &p+1 = %p\n", *(p+1),p+1);printf("p+2 = %d, &p+2 = %p\n", *(p+2),p+2);printf("p+3 = %d, &p+3 = %p\n", *(p+3),p+3);return 0;
}

这篇关于Linux之最简单判断系统大小端(二十四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片