Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114648
  • 博文数量: 24
  • 博客积分: 920
  • 博客等级: 准尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-12 16:16
个人简介

努力做个顶好的程序匠

文章分类

全部博文(24)

文章存档

2013年(1)

2011年(2)

2010年(21)

我的朋友

分类: C/C++

2010-09-13 17:03:07

 
 
网络编程中,字节顺序是个很重要的东东, 搞不明白, 在异构计算机之间通信很容易出问题。所谓字节顺就是某种数据类型内部字节的顺序,学习过x86汇编应该都知道这么一点,“低位存储在低字节,高位存储在高字节”,这就是所谓的little_endian,相反的叫big_endian,但是要注意的是不要把所有的机器都想象成x86体系结构的little_endian存储,要考虑到程序的通用性和可移植性。下面一段小代码可以判断机器的字节顺序
 

#include<stdio.h>
#define is_little_endian3(x) *(char *)&x
union endian_un
{
    short var;
    char bits[sizeof(short)];
};
int is_little_endian1()
{
    union endian_un flag;
    flag.var=0x0102;
    if(flag.bits[0]==1&&flag.bits[1]==2)
        return 0;
    else
        return 1;
}
int is_little_endian2()
{
    unsigned short flag=0x4321;
    if(*(char *)&flag==0x21)
        return 1;
    else
        return 0;
}

int main()
{

    if(is_little_endian1())
        printf("judge by method 1,little-endian\n");
    else
        printf("judge by method 1,big-endian\n");
    
    if(is_little_endian2())
        printf("judge by method 2,little-endian\n");
    else
        printf("judge by method 2,big-endian\n");
    
    short a=0x00ff;
    if(is_little_endian3(a))
        printf("judge by method 3,little-endian\n");
    else
        printf("judge by method 3,big-endian\n");

    return 0;
}


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