当前位置: 首页 > news >正文

网站建设域名注册免费集宁网站建设

网站建设域名注册免费,集宁网站建设,wordpress首页文件夹,免费网页浏览器大端与小端存储详尽说明 大端与小端存储详尽说明 大端与小端存储详尽说明一. 什么是字节序二. 什么是大端存储模式三. 什么是小端存储模式四. 大小端各自的特点五. 为什么会有大小端模式之分六. 为什么要注意大小端问题六. 大小端判定程序七. 大端小端的转换1#xff09;16位大…大端与小端存储详尽说明 大端与小端存储详尽说明 大端与小端存储详尽说明一. 什么是字节序二. 什么是大端存储模式三. 什么是小端存储模式四. 大小端各自的特点五. 为什么会有大小端模式之分六. 为什么要注意大小端问题六. 大小端判定程序七. 大端小端的转换116位大小端转换232位大小端转换 八. 大小端数据的存取1存储时2读取时 一. 什么是字节序 字节序也就是字节的顺序指的是多字节的数据在内存中的存放顺序。 在几乎所有的机器上多字节对象都被存储为连续的字节序列。 不同的CPU有不同的字节序类型最常见的有两种 Little-Endian将低序字节存储在起始地址低位编址也就是小端存储模式。 Big-Endian将高序字节存储在起始地址高位编址也就是下面说的大端存储模式。 二. 什么是大端存储模式 数据的低位保存在内存中的高地址中数据的高位保存在内存中的低地址中这样的存储模式有点儿类似于把数据当作字符串顺序处理地址由小向大增加而数据从高位往低位放 高字节数据存储在低地址。 16进制数据0x12345678 存储方式低地址12|34|56|78高地址 数组表示 buf[3] (0x78) – 低位 buf[2] (0x56) buf[1] (0x34) buf[0] (0x12) – 高位 记忆方法: 地址的增长顺序与值的增长顺序相反。 三. 什么是小端存储模式 数据的低位保存在内存中的低地址中数据的高位保存在内存中的高地址中这种存储模式将地址的高低和数据位权有效地结合起来高地址部分权值高低地址部分权值低和我们的逻辑方法一致。 16进制数据0x12345678 存储方式低地址78|56|34|12高地址 数组表示 buf[3] (0x12) – 高位 buf[2] (0x34) buf[1] (0x56) buf[0] (0x78) – 低位 记忆方法: 地址的增长顺序与值的增长顺序相同 四. 大小端各自的特点 小端模式 强制转换数据不需要调整字节内容1、2、4字节的存储方式一样。 大端模式 符号位的判定固定为第一个字节容易判断正负。网络传输一般使用的就是Big Endian也被称之为网络字节序或网络序。 五. 为什么会有大小端模式之分 这是因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为8bit。但是在C语言中除了8bit的char之外还有16bit的short型32bit的long型要看具体的编译器另外对于位数大于8位的处理器例如16位或者32位的处理器由于寄存器宽度大于一个字节那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。 我们常用的x86结构是小端模式而KEIL C51则为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。 因此可以说大端存储或小端存储都是由系统设定的两者区别在于低地址存储的数据因此可以写程序进行判断。 六. 为什么要注意大小端问题 C/C语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的而JAVA编写的程序则唯一采用big endian方式来存储数据。试想如果你用C/C语言在x86平台下编写的程序跟别人的JAVA程序互通时会产生什么结果就拿上面的 0x12345678来说你的程序传递给别人的一个数据将指向0x12345678的指针传给了JAVA程序由于JAVA采取big endian方式存储数据很自然的它会将你的数据翻译为0x78563412。 因此在你的C程序传给JAVA程序之前有必要进行字节序的转换工作。 六. 大小端判定程序 请写一个C函数若处理器是Big_endian的则返回0如果Little_endian的则返回1。 int checkLittleEndian() {{union w{int a;char b;} c;c.a 1;return (c.b 1);} }联合体union的存放顺序是全部成员都从低地址开始存放解答利用该特性轻松地得到了CPU对内存采用Little-endian仍是Big-endian模式读写。 void Endianness() {int a 0x12345678;if( *((char*)a) 0x78)cout Little Endian endl;elsecout Big Endian endl; }这一种是通过强制类型转换的方式来判断大小端的。如果是小端的话低位字节0x78的内容应该是存放在低地址中。 七. 大端小端的转换 116位大小端转换 #define BSWAP_16(x) \ (uint_16)((((uint_16)(x) 0x00ff) 8) | \ (((uint_16)(x) 0xff00) 8) \ ) 或者是函数的形式 uint_16 bswap_16(uint_16 x) {return (((uint_16)(x) 0x00ff) 8) | \(((uint_16)(x) 0xff00) 8) ; }232位大小端转换 #define BSWAP_32(x) \ (uint_32)((((uint_32)(x) 0xff000000) 24) | \ (((uint_32)(x) 0x00ff0000) 8) | \ (((uint_32)(x) 0x0000ff00) 8) | \ (((uint_32)(x) 0x000000ff) 24) \ ) 或者是函数的形式 uint_32 bswap_32(uint_32 x) { return (((uint_32)(x) 0xff000000) 24) | \ (((uint_32)(x) 0x00ff0000) 8) | \ (((uint_32)(x) 0x0000ff00) 8) | \ (((uint_32)(x) 0x000000ff) 24) ; } 八. 大小端数据的存取 1存储时 1先按照数据类型开辟一个空间。 int a4字节|——|——|——|——| 2数据定义。a0x123456 3数据分割成存储单元字节。 0x12——0x34——0x56 4不用考虑谁先放谁后放我们要按顺序放先放0x12再放0x34…… 5大端存储方式先往低地址放 |0x12|0x34|0x56|——| 小段存储方式先往高地址放 |——|0x56|0x34|0x12| 2读取时 读取时 1大端依次读出小端倒叙读出。读取时字节内部是一个整体不受倒叙影响。 2读取后就和之前未存储时顺序一致了也就是数没发生变化。 char只占有一个字节因此字符不需要考虑大小端而字符串又是单个字符的组合因此也不需要考虑大小端。因此在网络通信中通信信息为字符串不需要考虑大小端问题。
http://www.pierceye.com/news/144536/

相关文章:

  • wap多用户网站微信端的网站开发python
  • 网络营销中自建网站厦门湖里区建设局网站
  • 公司建设网站的申请信用卡做盗版影视网站违法吗
  • 商务网站推广技巧包括什么移动网站开发教程
  • 北京网站备案域名温州制作网站公司
  • 门户网站建设工作流程做网站的背景图片
  • 用360云盘做网站简洁个人博客网站模板
  • 沈阳网站建设 网络服务wordpress媒体库图片不显示
  • 什么公司做网站出名大商创 多用户商城
  • 学校网站管理网站制作开发及优化是什么
  • wordpress获取所有标签页那些网站用不着做优化
  • 大有网网站现在较为常用的网站开发技术
  • 太原建站公司有哪些网站统计 wordpress
  • 网站轮播图怎么保存盛锡福网站
  • 做网站用百度浏览器网络营销案例分析试题
  • 当建设部门网站南宁网站的优化
  • wordpress访问文件夹成都黑帽seo
  • 上海市建设工程安全质量监督总站网站做配资网站
  • 网站管理建设的需求分析小程序开发教程免费
  • 石家庄网站建设电话重庆最便宜的网站建设
  • 人才网站建设策划书pc网站建设
  • 做网站用哪几个端口 比较好微信营销
  • 网站开发价格有专业做网站的吗网站公司
  • 西安网站建设全包做网站要多少
  • 如何建设传奇网站怎样做招嫖网站
  • 企石镇网站仿做连云港网站开发
  • php 网站做分享功能重庆建设工程信息网30系统
  • 西部数码创建php网站北京上云网站建设公司
  • 中标建设集团有限公司 网站游戏开发软件有哪些
  • 上饶哪里做网站办公家具网站建设公司