首页 > 其他分享 >C语言判断大小端的几种方法

C语言判断大小端的几种方法

时间:2023-06-07 11:02:55浏览次数:40  
标签:小端 int 端的 几种 char 存放 endian C语言 pointer

在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下。

以后用到了就直接可以用了。

  所谓的大小端,大致的解释意思就是:

【大端模式】 CPU对操作数的存放方式是高地址存放低位,低地址存放高位。

【小端模式】CPU对操作数的存放方式是高地址存放高位,低地址存放低位。

大多数ARM处理器都是采用的小端模式,PowerPC是采用的大端模式,网络字节序是采用的大端模式。

  常用的有两种方式来判断大小端,一种是使用C语言中的联合体,具体代码如下:

int checkCPU()
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1); // 小端返回TRUE,大端返回FALSE
}

  其中,linux内核中就是使用这部分的代码,代码如下所示:

static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)


  另外一种就是使用指针的方式,具体代码如下所示:

void checkPoint(void)
 
{
 
    int i = 1;   
   unsigned char *pointer;   
 
   pointer = (unsigned char *)&i;   
 
   if(*pointer)   
 
   {   
 
             printf("litttle_endian");   
 
       }   
 
       else   
 
       {   
 
              printf("big endian/n");   
 
       }   
 
}

标签:小端,int,端的,几种,char,存放,endian,C语言,pointer
From: https://blog.51cto.com/u_4018548/6430382

相关文章

  • crc16校验C语言源码实例解析
    一概念:循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现......
  • 几种分布式文件系统的优缺点归纳与总结
    1、常用的分布式文件系统有以下几种:1.HadoopHDFS:HadoopDistributedFileSystem(HDFS)是ApacheHadoop生态系统的一部分,用于存储和处理大数据。2.Ceph:Ceph是一个开源的分布式存储系统,提供了高可用性、高性能和可扩展性。3.GlusterFS:GlusterFS是一个开源的分布式文件系统,提供......
  • C语言-状态机模式
    1.假设我们的交通信号灯控制器有以下三个状态:绿灯状态、黄灯状态和红灯状态。在绿灯状态下,我们可以选择进入黄灯状态或红灯状态。在黄灯状态下,我们等待一段时间,然后返回到红灯状态。2.Code点击查看代码#include<stdio.h>#include<unistd.h>//定义状态枚举类型typedefe......
  • 程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
    (编译与链接)前言每当我们运行一段代码时,编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件(.exe),有了这个可执行文件,便可以执行我们写的程序了。那么编译器对代码的编译以及生成可执行程序的过程是怎样的呢?这个问题便是本文章将要探讨的。程序的环境在A......
  • 逍遥自在学C语言 | break-循环的中断与跳转
    前言在C语言中,break语句是一种控制流语句,它用于终止当前所在的循环结构(for、while、do-while)或者switch语句,从而跳出循环或者结束switch语句的执行。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿—......
  • C语言编程语法—文件读写
    一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用fopen()函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FIL......
  • C#调用默认浏览器打开网页的几种方法
    方法一:从注册表中读取默认浏览器可执行文件路径    privatevoidbutton1_Click(objectsender,EventArgse)    {      //从注册表中读取默认浏览器可执行文件路径      RegistryKeykey=Registry.ClassesRoot.OpenSubKey(@"http......
  • 关于C语言题602
    1、编写函数voidcount(chara[],charw[][10],intn,intb[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。 #include<stdio.h>#include<string.h>#defineN10intmain(){......
  • Mac 在指定目录下打开终端的方式
    参考资料:1、mac当前位置打开终端https://jingyan.baidu.com/article/ce436649281a293773afd3d8.html2、如何在MAC指定文件夹打开终端(terminal)https://www.jianshu.com/p/3e1b5fe48952......
  • KingbaseES V8R6 几种不同的表复制方式
    前言当数据库遇到未知问题,有时候无法入手分析,在非生产数据库或者征得客户同意获得特殊时间,需要重建表解决,下面提供了多种不同的复制表的方法,我们了解一下他们的差异。测试1、CREATETABLEASSELECT语句用于复制表结构和数据,但是不会复制索引。我们可以使用以下语句基于t1......