知道大小端,但是都没有整理下,只知道网络要用到big-endian,也就是大端模式。

在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian。

以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:

Big-Endian: 低地址存放高位,如下图:

栈底 (高地址)

---------------

buf[3] (0x78) -- 低位

buf[2] (0x56)

buf[1] (0x34)

buf[0] (0x12) -- 高位

---------------

栈顶 (低地址)

Little-Endian: 低地址存放低位,如下图:

栈底 (高地址)

---------------

buf[3] (0x12) -- 高位

buf[2] (0x34)

buf[1] (0x56)

buf[0] (0x78) -- 低位

--------------

栈顶 (低地址)

Big-Endian 优点: 靠首先提取高位字节,你总是可以由看看在偏移位置为0的字节来确定这个数字是正数还是负数。你不必知道这个数值有多长,或者你也不必过一些字节来看这个数值是否含有符号位。这个数值是以它们被打印出来的顺序存放的,所以从二进制到十进制的函数特别有效。因而,对于不同要求的机器,在设计存取方式时就会不同。

Little-Endian 优点: 提取一个,两个,四个或者更长字节数据的汇编指令以与其他所有格式相同的方式进行:首先在偏移地址为0的地方提取最低位的字节,因为地址偏移和字节数是一对一的关系,多重精度的数学函数就相对地容易写了。

如何检查处理器是 Big-Endian还是Little-Endian?

由于联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性就可以轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。例如:

#include

int checkCPUendian()

{

union

{

unsigned int a;

unsigned char b;

}c;

c.a = 1;

return (c.b == 1);

} /*return 1 : little-endian, return 0:big-endian*/

int main()

{

checkCPUendian() ? printf("Little-endian\n"):printf("Big-endian\n");

return 0;

}

或者最直接的:

#include

int main()

{

short int x;

char x0,x1;

x = 0x1122;

x0 = ((char*)&x)[0]; //低地址单元

x1 = ((char*)&x)[1]; //高地址单元

if(x0 == 0x11)

printf("Big-endian\n");

else

printf("Little-endian\n");

return 0;

}

little endian c语言,c语言那些细节之little-endian和big-endian相关推荐

  1. 为什么我们需要一门新语言——Go语言

    编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有 PHP.Python.Perl.Ruby.JavaS ...

  2. linux 在指定区域分配内存 c语言,C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存...

    一.malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数.free是进行内存释放的库函数. 1.函数原型 #include void *malloc( s ...

  3. 编程语言——标记语言——脚本语言之间的比较

    首先说一下,什么是编程语言,标记语言跟脚本语言: 编程语言(programming language):是用来定义计算机程序的形式语言.它是一种被标准化的交流技巧,用来向计算机发出指令.一种计算机语言 ...

  4. 标记语言,脚本语言,编译语言的定义与区别

    一.标记语言 标记语言,是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码.与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在 ...

  5. 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx

    C语言程序设计职工信息管理系统.docx 1 数信学院数信学院 课程设计报告课程设计报告 课程名称课程名称C C 语言程序设计语言程序设计_ _ 题目名称题目名称职工信息管理系统职工信息管理系统 学生 ...

  6. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  7. 程序设计语言python语言概述

    程序设计语言 什么是程序设计语言 程序设计语言是人类与计算机交流和沟通的语言.人们通过使用程序语言,来书写计算机程序,以达到设计的程序满足需求的目的. 程序语言的发展历史 程序语言经历了从低级语言到高 ...

  8. c语言吗 程序语言,编程语言为什么从c语言开始,那有没有a语言b语言呢?

    实际上没有A语言叫法. B语言 B语言是贝尔实验室的计算机先驱Ken Thompson 和 Dennis Ritchied与1969年设计开发.他们的主要其他功绩还有Unix操作系统和C语言.可以说C ...

  9. 脚本语言语言脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua

    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript.VBScript.Perl.PHP.Python.Ruby.Lua 工作控制语言和 ...

  10. 怎么理解python语言_Python语言入门1-理解Python语言

    本文主要向大家介绍了Python语言入门的理解Python语言,通过具体的内容向大家展现,希望对大家学习Python语言入门有所帮助. python是解释型的脚本语言 解释型语言 与C/C++等编译型 ...

最新文章

  1. 浅析在网站软文内容中是如何做好关键词优化的?
  2. 自制贴纸图案大全图片_重磅!Supreme x 山本耀司联名Bogo贴纸泄露,发售确认?!...
  3. mysql主从只同步部分库或表
  4. java合并list_怎么把两个list合并
  5. 国防科大JAVA工程师笔试题_国防科大人工智能考博题答案
  6. opencv图像切割1-KMeans方法
  7. UIImagePickerController按钮的中文问题
  8. 最优化学习笔记(三)——梯度下降法
  9. wget下载速度太慢,mwget多线程下载工具
  10. 源码包安装mysql5.7.25_centos源码安装mysql5.7.25-boost
  11. 6个用于大数据分析的最好工具(转)
  12. 0框架前端-如何写一个下拉菜单(Dropdowns)
  13. 算法设计与分析基础 课后习题答案(第一章)
  14. Flutter发送表情接收表情库
  15. 互斥机制synchronized学习
  16. 竖流式沉淀池集水槽设计计算_竖流沉淀池设计计算书.
  17. Ubuntu环境下XAMP安装PHP的rabbitmq扩展
  18. C++单元测试框架Gtest的配置与使用过程
  19. ping命令使用介绍及怎样使用Ping命令来测试网络连通性
  20. 万里挑一!热门机器学习开源资源最强盘点

热门文章

  1. Docker hub配置国内加速器
  2. 官宣:教父级讲师李明加入尚硅谷
  3. PostgreSQL修炼之道之PostgreSQL安装与配置(二)
  4. 如何快速将多个文件合并为一个文件?
  5. java升序降序排列desc_Sql--order by、desc降序、top
  6. 音频转换成mp3,音频转mp3格式
  7. 下列各命令中可以在计算机屏幕上,下列各命令中,可以在计算机屏幕上放映演示文稿的是()。...
  8. gmap实现地图的旋转
  9. PCB logo 制作 视频教程 内含 PCBLogoCreator软件
  10. 深度势能 deep potential