Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17615
  • 博文数量: 34
  • 博客积分: 990
  • 博客等级: 准尉
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-31 20:57
文章分类
文章存档

2012年(8)

2011年(26)

我的朋友
最近访客

分类: C/C++

2011-11-01 22:19:04

  1.               big endian         little endian
  2. address + 0 :       0x12         0x78
  3. address + 1 :       0x34         0x56
  4. address + 2 :       0x56         0x34
  5. address + 3 :       0x78         0x12
上面是大堆栈与小堆栈在内存中的分布,
下面是程序判断是否计算机为大堆或是小堆
  1. #include <stdio.h>

  2. union U
  3. {
  4.     int i;
  5.     char c[sizeof(int)];
  6. }u;

  7. int main()
  8. {
  9.     u.i = 0x1;
  10.     if (u.c[0] == 1){
  11.         //如果低字节为1,表示低位存在低地址,是little endian。
  12.         printf("little endian!\n");
  13.     }else if (u.c[sizeof(int) - 1] == 1){
  14.         //如果高字节为1,表示低位存到高地址,是big endian。
  15.         printf("big endian!\n");
  16.     }

  17.     return 0;
  18. }

再接下来是大小之间的转换:

 

  1. typedef unsigned int UINT;
  2. UINT change(UINT ui)
  3. {
  4.  //change the two parts
  5.     ui = ((ui & 0x0000FFFFU) << 16) | (ui >> 16);
  6.   // change the each byte
  7.     return ((ui & 0x00FF00FFU) << 8) | ((ui & 0xFF00FF00U) >> 8);
  8. }
Ref:
阅读(174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~