当前位置: 首页 > 编程日记 > 正文

byte endian(biglittle endian)

1. 大小端的区别
little endian:把低位字节存放在内存的低位; //
big endian:   将低位字节存放在内存的高位;

比如:0x1234,则12 就属于高位字节;34 属于低位字节

假如从地址0x0000 0000开始的一个字节中保存数据0x12345678, 这2中字节序在内存当中存放顺序为:

address:      0x0000 0000    0x0000 0001    0x0000 0002    0x0000 0003
big_endian  0x12                  0x34                 0x56                 0x78
lit-endian     0x78                  0x56                 0x34                 0x12

2.  为什么会有大小端模式的区分呢?
    因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
    当前的存储器,多以byte为访问的最小单元,当一个逻辑上的整理必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是endian的问题应运而生了,对于不同的存储方法,就有Big-endian和Little-endian两个描述.
    (这两个术语来自于 Jonathan Swift 的《格利佛游记》其中交战的两个派别无法就应该从哪一端--小端还是大端--打开一个半熟的鸡蛋达成一致。在那个时代,Swift是在讽刺英国和法国之间的持续冲突,Danny Cohen,一位网络协议的早期开创者,第一次使用这两个术语来指代字节顺序,后来这个术语被广泛接纳了。)

3. 各种CPU支持的字节序不同

lit-endian:  x86
big_endian:  Motorola/IBM/SUM cpu
ARM 既能工作于大端也能工作于小端

所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。

4. 怎么检测当前的处理器属于哪个字节序?

a. 用VC2005 调试查看short变量在内存中的布局,如下:

int _tmain(int argc, _TCHAR* argv[])
{
 short t = 0x1234;
 return 0;
}
 &t = 0x12ff60, t 在内存当中的布局如下图:

由此可见, x86 CPU 采用的是little endian.

b.  利用字节序的基本规则进行判断

enum BYTE_ENDIAN
{
 little_endian,
 big_endian,
 unknown_error
};

BYTE_ENDIAN check_byte_endian_1()
{
 short t = 0x1234;

char c = (*(char *)(&t));

if (0x12 == c)
 {
  return big_endian;
 }
 else if(0x34 == c)
 {
  return little_endian;
 }
 
 return unknown_error;
}

3.

/*---------------------------------------------------------------------------
联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性,
轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写
-----------------------------------------------------------------------------*/
BYTE_ENDIAN check_byte_endian_2()
{
 union test_endian
 {
  char c;
  short s;
 };

test_endian t;
 t.s = 0x1234;
 
 if (0x12 == t.c)
 {
  return big_endian;
 }
 else if(0x34 == t.c)
 {
  return little_endian;
 }
 
 return unknown_error;
}

==================================
另外,可以参考百度百科(关键字:字节序):http://baike.baidu.com/view/2194385.htm 获取更多信息。

相关文章:

鸡啄米vc++2010系列32(标签控件Tab Control 下)

上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分。 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类。 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Control,也可以使用CTabCtrl类的Create成员函数创建。…

Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)

源码获取:博客首页 "资源" 里下载! 这个项目涉及到Shiro整合JWT、秒杀功能所具备的基本要求(限流、乐观锁、接口隐藏、JMeter高并发测试等等)、消息中间件RabbitMQ的异步邮件通知和死信队列、沙箱支付宝模拟支付等等技术亮点。 项目功能&#…

虚拟机使用镜像文件安装系统

场景说明:指定Linux镜像之后,点击电源开始安装,安装完成之后,卸载ISO,进入BIOS,设置从硬盘启动。vmvare有提供快速安装的方式。当前的安装类似于手动安装,模拟真实的环境操作步骤:1&…

cmd命令简单别木马的蛛丝马迹

一些基本的Windows命令往往可以识别木马的蛛丝马迹,而且在保护网络安全上起到很大的作用。 检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但是手里没有完善的工具来检测是不是真有这样的事情发生,那可以…

ubuntu常用翻译工具stardict

日常办公应用中,我们经常会碰到一些陌生的外文单词或文章需要翻译,在Windows平台上,可通过很多翻译工具来帮忙解决。当我们转到Ubuntu系统 中办公时,肯定也希望能有一款简单易用、功能强大的翻译工具。   这里给大家推荐Linux平…

Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 三角色教师 管理员,学生教务管理系统,包括院系管理,课题综合管理,信息管理,以及差旅管理,学生选题…

jsp 环境配置记录

1. jdk,下载地址1 环境变量配置: 1)新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录(本人是 C:\Java\jdk1.7.0) 2) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (注意原…

一些关于找工作的书籍

技术类 算法导论:不要纠缠太难的部分(红黑树、斐波那契额堆、NP、近似算法); 编程之美:仔细阅读,包括上面的智力题,纸上手写代码; 编程珠玑:建议仔细阅读,尤其…

最快地复制一张表

1.mysqldump方法 一种方法是,使用mysqldump命令将数据导出成一组INSERT语句。你可以使用下面的命令: mysqldump -h$host -P$port -u$user --add-locks --no-create-info --single-transaction --set-gtid-purgedOFF db1 t --where"a>900" …

Linux下C++开发工具介绍

概述 就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样。Emacs, vi, eclipse, anj…

Linked List Cycle II

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? 分析:和Linked List Cycle类似,还是用map。 用时:60ms 1 /**2 * Definition …

Java项目:考试管理系统(java+Springboot+Maven+Jpa+Vue+Mysql)

源码获取:博客首页 "资源" 里下载! 一、项目简述本系统功能包括: 支持单选题、多选题、判断题支持学生(student)、教师(teacher)、管理员(admin)三种角色学生:参加考试和查看我的考试教师:学生的所有权限创建…

[物理学与PDEs]第1章第7节 媒质中的 Maxwell 方程组 7.2 媒质交界面上的条件

通过 Maxwell 方程组的积分形式易在交界面上各量应满足交界面条件: $$\beex \bea \sez{{\bf D}}\cdot{\bf n}\omega_f,&\sex{\omega_f:\ \mbox{交界面上自由电荷密度}};\\ \sez{{\bf B}}\cdot{\bf n}0,&\sex{\ra\mbox{ 磁感应强度法向分量在交界面上连续}};\\ \sez{{\b…

第十二周编程总结

这个作业属于的课程C语言程序设计2这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/MS/homework/3239我在这个课程的目标是使用编程实现简单的游戏设计这个作业在哪个具体方面帮助我实现目标使用指针解决问题,熟悉指针与函数之间的关系和指针作为函数返回值…

什么是交叉编译

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上…

树形结构在关系数据库中的设计

在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构、商品的分类等。 这样的层次结构在关系数据库中难以直观地表示。常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系。 fidpidfname 1 Food 2 1 Fruit 3 2 Red 4 3…

Java项目:在线课程会员系统(java+Springboot+Maven+JSP+Spring+Mysql+layui)

一、项目简述 功能包括: 用户管理,课程管理,在线视频观看,评论,会员展示,会员充值等等。 二、项目运行 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEc…

职场观察:高薪需要什么?

标签:职场高薪原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xjsunjie.blog.51cto.com/999372/1378547新的一年,看到别人跳槽或涨薪,你是否也蠢蠢欲动…

Excel-姓名列中同一个人汇总金额列,得出总金额

8、姓名列中同一个人求和金额列,得出总金额。 方法一: P2处公式SUMPRODUCT(($M$2:$M$20$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan.sogou.com/guide/detail/?id1610011625 PS:这个只是单条件求和,…

C语言编译全过程(转贴)

C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件…

Java项目:家教管理系统(java+SSM+MyBatis+MySQL+Maven+Jsp)

源码获取:博客首页 "资源" 里下载! 该系统分为前台和后台 前台功能有:登录、注册、查看学员、查看教师、个人中心等。 后台功能有:用户管理、学员管理、教师管理、审核管理、公告管理、新闻管理、简历管理等。前台注册…

ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 ECShop存在一个盲注漏洞,问题存在于/api/client/api.php文件中,提交特制的恶意POST请求可进行SQL注入攻击,可获得敏感信息或操作…

C++ 检测内存泄露

本文描述了如何检测内存泄露。最主要的是纯C,C的程序如何检测内存泄露。 现在有很多专业的检测工具,比如比较有名的BoundsCheck, 但是这类工具也有他的缺点,我认为首先BoundsCheck是商业软件,呵呵。然后呢需要安装,使用…

Java 学习笔记(4)——java 常见类

上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法。其实Java相比于C来说强大的另一个原因是Java中提供了大量可用的标准库 字符串 字符串可以说是任何…

浅谈GCC预编译头技术

浅谈GCC预编译头技术 文/jorge ——谨以此文,悼念我等待MinGW编译时逝去的那些时间。 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA。后来一直用到C Builder,尽管Borl…

Java项目:慢病报销管理信息系统(java+MySQL+Jdbc+Servlet+Jsp)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 慢病管理,医疗机构管理,家庭管理,费用交纳,费用报销,报表统计等等功能。 二、项目运行 环境配置: Jd…

Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法

当使用jQuery Ajax post请求时可能会遇到类似这样的错误提示 XMLHttpRequest cannot load http://xxxxxx. Origin http://xxxxxx is not allowed by Access-Control-Allow-Origin. 这是Ajax跨域访问权限的问题,服务器端不接受来自另一个不同IP地址的由脚本文件发出的…

php 遍历所有的文件

<?php prin_r(glob($path)); 2 转载于:https://www.cnblogs.com/zqk8553/p/3640071.html

Oracle数据库物理存储结构管理

1、实验目的 &#xff08;1&#xff09;掌握Oracle数据库数据文件的管理。 &#xff08;2&#xff09;掌握Oracle数据库控制文件的管理。 &#xff08;3&#xff09;掌握Oracle数据库重做日志文件的管理。 &#xff08;4&#xff09;掌握Oracle数据库归档管理。 2、实验环境 Wi…

KDE与GNOME的战争史(转载)

虽然在商业方面存在竞争&#xff0c;GNOME与KDE两大阵营的开发者关系并没有变得更糟&#xff0c;相反他们都意识到支持对方的重要性—如果KDE和GNOME无法实现应用程序的共享&#xff0c;那不仅是巨大的资源浪费&#xff0c;而且将导致Linux出现根本上的分裂。 KDE与GNOME是…