首页 > 编程语言 >【c&c++】C语言实现判断大端小端存储方式的代码

【c&c++】C语言实现判断大端小端存储方式的代码

时间:2023-02-10 14:36:00浏览次数:60  
标签:小端 存储 Little c++ char 地址 printf 大端

一、大小端简介

大小端是计算机存储的两种方式。

小端表示法(Little-endian):

所谓的小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。如:

16bit宽的数0×1234

内存地址 存放内容

0×4000 0×34

0×4001 0×12

而32bit宽的数0×12345678

内存地址 存放内容

0×4000 0×78

0×4001 0×56

0×4003 0×34

0×4004 0×12

大端表示法(Big-endian):

所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。如:

16bit宽的数0×1234

内存地址 存放内容
0×4000 0×12
0×4001 0×34


32bit宽的数0×12345678
内存地址 存放内容

0×4000 0×12

0×4001 0×34

0×4003 0×56
0×4004 0×78

 

二、测试代码:

#include <stdio.h>
void Little_Big_Endian_Check()
{
 int  m= 0x12345678;
 char c =  *(char *)&m;  //通过将int(4字节)强制类型转换成char单字节,c指向m的起始字节(低字节)
 printf("the size of integer is %ld \n",sizeof(m));
 printf("*((char *)&m + 0):0x%x\n", *((char *)&m + 0));
 printf("*((char *)&m + 1):0x%x\n", *((char *)&m + 1));
 printf("*((char *)&m + 2):0x%x\n", *((char *)&m + 2));
 printf("*((char *)&m + 3):0x%x\n", *((char *)&m + 3));
 if( c == 0x12)//低字节存的是数据的高字节数据
 {
  printf("It is Big-Endian!\n");//是大端模式
 }
 else
 {
   printf("It is Little-Endian!\n");//是小端模式
 }
}
 
void main(void)
{   
    printf("the program is used to test big or small!\n");
    Little_Big_Endian_Check();
}

三、测试结果

PS:低位保存在内存的低地址里面,从结果看我这台计算机存储模式是小端模式(Little-Endian)。

 【参考连接】

C语言判断大小端存储问题

运用C语言判断计算机的大小端存储模式

   

 

标签:小端,存储,Little,c++,char,地址,printf,大端
From: https://www.cnblogs.com/opensmarty/p/17108788.html

相关文章

  • Modern C++ ——constexpr的各种用法
    ModernC++——constexpr的用法Reference《现代C++语言核心特性解析》为什么引入constexprconst可以定义常量,但也可以用来定义只读变量。const变量的值不一定是在......
  • c++指针基础
    指针是一个变量,其存储的是值的地址,而不是值本身。如何找到常规变量的地址?只需对变量应用地址运算符(&),就可以获得它的位置;intdonuts=3;&donuts就是取donuts变量的地址。......
  • 【快速学】指针是什么?指针常量、常量指针是什么?(C++)
    0、先上总结指针是什么?指针是个数据类型,它里面存储的是个地址如inta=3;,定义了一个int类型的变量a,值为3,它在内存中的地址为&a同理,int*b=3;,定义了一个int*类型的变量b......
  • c++引用lib
    如果需要引用的是第三方的lib,没有把源码引入到工程中,则需要通过传统方式引用。1.在需要引用的项目上右键属性,在vc++目录中引用目录和引用库目录。引用目录是lib头文件的......
  • 【c&c++】结构 | 结构与函数 | C语言
                 ......
  • 【c&c++】C语言snprintf()函数用法
    一、函数原型snprintf(),为函数原型intsnprintf(char*str,size_tsize,constchar*format,...)。二、函数介绍将可变个参数(...)按照format格式化成字符串,然后将其......
  • c++17区域锁std::scoped_lock
    template<class...MutexTypes>classscoped_lock;(sincec++17)作用同时持有一个或多个Mutex的RAII机制的mutex包装器,可以一次性获取多个mutex,避免发生死锁。当......
  • 学习 C++第三天
    转义字符\?在书写连续多个问号时使用,防止他们被解析成三字母词\'用于表示字符常量\“用于表示一个字符串内部的双引号\\用于表示一个反斜杠,防止它被解释为一个转义序列......
  • C++11新特性
    C++语法movesemantics(移动语义)参考资料:这个网站的大部分资料对初学者都极其友好stanfordCS106Lmovesemanticshttps://www.youtube.com/watch?v=St0MNEU5b0o&......
  • 【八大数据排序法】堆积树排序法的图形理解和案例实现 | C++
    第二十一章堆积树排序法:::hljs-center目录第二十一章堆积树排序法●前言●认识排序1.简要介绍2.图形理解3.算法分析●二、案例实现1.案例一●总结......