原文地址:http://blog.csdn.net/callinglove/article/details/7840421

计算机都是以八位一个字节为存储单位,那么一个16位的整数,也就是C语言中的short,在内存中可能有两种存储顺序big-endian和litte-endian.考虑一个short整数0xAF32(0x32是低位,0xAF是高位),把它赋值给一个short变量,那么它在内存中的存储可能有如下两种情况:

大端字节(Big-endian):较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。

——————————————--------

|    0x2000         |          0x2001    |

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

|    0xAF             |          0x32       |

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

小端字节(Big-endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。

——————————————--------

|    0x2000         |          0x2001    |

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

|    0x32             |          0xAF       |

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

判断计算机的存储方式:

    /********大端返回0;小端返回0*******/  int checkCPU()  {  union w  {  int x ;  char y ;  }c ;  c.x = 1;  return (c.y==1))  }  

大小端转换:

    #include<stdio.h>  typedef unsigned int uint_32 ;  typedef unsigned short uint_16 ;  #define BSWAP_16(x) \  (uint_16)((((uint_16)(x) & 0x00ff) << 8) | \  (((uint_16)(x) & 0xff00) >> 8) \  )  #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_16 bswap_16(uint_16 x)  {  return (((uint_16)(x) & 0x00ff) << 8) | \  (((uint_16)(x) & 0xff00) >> 8) ;  }  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) ;  }  int main(int argc,char *argv[])  {  printf("------------带参宏-------------\n");  printf("%#x\n",BSWAP_32(0x12345678));  printf("%#x\n",BSWAP_16(0x1234)) ;  printf("------------函数调用-----------\n");  printf("%#x\n",bswap_32(0x12345678));  printf("%#x\n",bswap_16(0x1234)) ;  return 0 ;  }  

Linux编程函数:

#include <stdio.h>
struct ST{  short val1;  short val2;
};
union U{  int val;  struct ST st;
};  int main(void)
{  int a = 0;  union U u1, u2;  a = 0x12345678;  u1.val = a;  printf("u1.val is 0x%x\n", u1.val);  printf("val1 is 0x%x\n", u1.st.val1);  printf("val2 is 0x%x\n", u1.st.val2);  printf("after first convert is: 0x%x\n", htonl(u1.val));  u2.st.val2 = htons(u1.st.val1);  u2.st.val1 = htons(u1.st.val2);  printf("after second convert is: 0x%x\n", u2.val);  return 0;
}  

big-endian和litte-endian转换 大端字节次序,小端字节次序转换相关推荐

  1. 大端模式和小端模式的转换

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

  2. 大端字节序小端字节序(网络字节序主机字节序)

    大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序 ...

  3. Java大端字节和小端字节

    1.什么是大端和小端 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的 ...

  4. 字节序、大端字节序(Big Endian)、小端字节序(Little Endian)总结

    什么是字节序? 字节序,简单来说,指的是 超过一个字节的数据类型在内存中存储的顺序 有几种字节序? 大端字节序(Big Endian) 高位字节数据存放在内存低地址处,低位字节数据存放在内存高地址处. ...

  5. java 大端字节序_理解字节序 大端字节序和小端字节序

    以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.csdn.net/yishengzhiai005 ...

  6. 【转】理解字节序 大端字节序和小端字节序

    转自:https://www.cnblogs.com/gremount/p/8830707.html 以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/by ...

  7. 什么是大端序和小端序,为什么要有字节序

    什么是字节序 字节序,又称端序或尾序(英语中用单词:Endianness 表示),在计算机领域中,指电脑内存中或在数字通信链路中,占用多个字节的数据的字节排列顺序. 在几乎所有的平台上,多字节对象都被 ...

  8. C语言之大端模式与小端模式

    大端模式与小端模式的定义(字节序) 大端模式:数据的高字节在低地址,低字节在高地址 小端模式:数据的高字节在高地址,低字节在低地址 怎么判断系统是大端模式和小端模式 首先来看两个知识点: (1)联合体 ...

  9. 计算机网络——网络字节序(大端字节序(Big Endian)\小端字节序(Little Endian))

    网络字节序 网络字节序 1.网络字节序 (Network Byte Order)和本机转换 2.字节序转换函数 网络字节序 1.网络字节序 (Network Byte Order)和本机转换 1.大端 ...

  10. 大端字节序与小端字节序的转换

    逐步加深对字节操作的理解,记录一下大端字节序与小端字节序的转换,开发环境是vs2010,项目类型是控制台输出程序,下面是代码实现: // ByteOrder_demo.cpp : 定义控制台应用程序的 ...

最新文章

  1. 『假如我是面试官』RabbitMQ我会这样问!
  2. 最短路径算法 Floyd-傻子也能看懂的弗洛伊德算法(转)
  3. nginx出现404和403错误
  4. ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)
  5. C/Cpp / Cpp 中 struct 和 class 区别
  6. AOJ - 邻家割草(最小割)
  7. 【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数
  8. void类型及void指针
  9. 常用电源及稳压芯片(一)
  10. 鳗鱼刺多怎么处理图像_图像二值化处理
  11. 转: Rust中的Pin详解 【Rust语言中文社区】
  12. 手把手教你编写-微信机器人
  13. docker客户端和服务端
  14. Qt 使用阿里图标库
  15. 基于JAVA幼儿园综合管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  16. 利用系统自带命令杀毒
  17. css 文字溢出...显示,hover时显示隐藏文字
  18. 使用GAN的图像超分辨率功能彻底消灭模糊图
  19. geotools 的书籍
  20. Linux下QT串口通过无线模块收发十六进制数据

热门文章

  1. 谷歌发布人类动作识别数据集AVA,精确标注多人动作
  2. helm v3.8.0 命令入门指南
  3. 时钟日历c语言源代码,日历时钟DS12887或146818的C语言源程序.doc
  4. 51单片机-实验元器件
  5. 中国信通院魏博锴:云原生混部标准解读
  6. value=“btnMsg“ conflicts with v-model on the same element because the latter already expands to
  7. STL常见面试题总结
  8. Android重力传感器研究
  9. android切换默认应用_如何在Android上设置默认应用
  10. 人脸识别特征介绍以及难题概括