Chinaunix首页 | 论坛 | 博客
  • 博客访问: 319176
  • 博文数量: 43
  • 博客积分: 1044
  • 博客等级: 准尉
  • 技术积分: 658
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-20 14:56
个人简介

人法地,地法天,天法道,道法自然。

文章分类

全部博文(43)

文章存档

2019年(1)

2013年(3)

2012年(15)

2011年(24)

分类: C/C++

2012-06-25 22:20:55

给出系统大小端识别的代码,仅供参考。
传统写法:

点击(此处)折叠或打开

  1. int get_order()
  2. {
  3.     union endian
  4.     {
  5.         short s;
  6.         char c[2];
  7.     } order;

  8.     order.s = 0x1234;

  9.     if (order.c[0] == 0x12 && order.c[1] == 0x34)
  10.     {
  11.         return 1; /* big endian */
  12.     }
  13.     else
  14.     {
  15.         return 0; /* little endian */
  16.     }
  17. }

简单写法:

点击(此处)折叠或打开

  1. int get_order()
  2. {
  3.     short s = 1;
  4.     short *ps = &s
  5.     char *pc;

  6.     pc = (char *)ps;

  7.     if (*pc == 0)
  8.     {
  9.         return 1; /* big endian */
  10.     }
  11.     else
  12.     {
  13.         return 0; /* little endian */
  14.     }
  15. }
参数写法:

点击(此处)折叠或打开

  1. static int test_order(char *c)
  2. {
  3.     *c = 1;
  4.     return 0;
  5. }

  6. int get_order()
  7. {
  8.     int i = 0;

  9.     test_order(&i);
  10.     if (i == 0)
  11.     {
  12.         return 1; /* big endian */
  13.     }
  14.     else
  15.     {
  16.         return 0; /* little endian */
  17.     }
  18. }


偷懒写法:

点击(此处)折叠或打开

  1. int get_order()
  2. {
  3.     if (htons(1) == 1)
  4.     {
  5.         return 1; /* big endian */
  6.     }
  7.     else
  8.     {
  9.         return 0; /* little endian */
  10.     }
  11. }


阅读(2947) | 评论(0) | 转发(5) |
给主人留下些什么吧!~~