加载中…
个人资料
老徐
老徐
  • 博客等级:
  • 博客积分:0
  • 博客访问:11
  • 关注人气:157
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[C/C++]大小端转换方法

(2012-10-30 10:33:50)
标签:

大小端

网络字节流

it

分类: C/CPlusPlus
文章以32位整数为输入,采用两种方法进行大小端转换,一个是宏定义,一个是函数形式;
#include "stdio.h"
#define T(x) (((x&0xff)<<24)|((x&0xff00)<<8)|((x&0xff0000)>>8)|((x&0xff000000)>>24))       //1.四个字节的排放顺序要弄清楚
void transfer(int x)
{
    char a,b,c,d;
    a=(char)(x&0xff);
    b=(char)((x&0xff00)>>8);                          //   2. 字符类型转换的优先级高于移位,所以用括号把移位操作括起来~
    c=(char)((x&0xff0000)>>16);
    d=(char)((x&0xff000000)>>24);
    //printf("0x%x 0x%x 0x%x 0x%x\n",a,b,c,d);
     x=(a<<24)|(b<<16)|(c<<8)|d;
    printf("after transfered x is 0x%x\n",x);
}

int main()
{
    int num;
    printf("input the number:\n");
    scanf("%d",&num);
    printf("The number you input is 0x%x\n",num);
    transfer(num);
    printf("after Macro transfered: 0x%x\n",T(num));
}

PS:大小端的检测一般用联合体去检测,联合体包含两个成员变量,一个是整形,一个是字符型~,具体代码可参考我的其他博文,
         或者在网上查找相关资料~

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有