免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456
最近访问板块 发新帖
楼主: eagle518
打印 上一主题 下一主题

谁能告诉我在c代码里如何区分long变量高位在前还是低位在前? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2008-04-09 10:32 |只看该作者

回复 #49 whyglinux 的帖子

说的有理. 顶...

但用:
union U {
  int i;
  char c[1];
};

可读性不够好!

论坛徽章:
0
52 [报告]
发表于 2008-04-09 20:03 |只看该作者
原帖由 system888net 于 2008-4-9 10:32 发表
说的有理. 顶...

但用:
union U {
  int i;
  char c[1];
};

可读性不够好!


那就直接定义为:
  1. union U {
  2.   int i;
  3.   char c;
  4. };
复制代码

然后检查 .c。

与 *(char *) &i 这种方式是异曲同工。

论坛徽章:
0
53 [报告]
发表于 2008-04-12 18:32 |只看该作者
原帖由 flw2 于 2008-4-3 15:09 发表
int bigendian()
{
        int i = 1;
        return *(char *) &i == 0;
}
这样代码行数更少

强!!!

论坛徽章:
0
54 [报告]
发表于 2008-04-12 23:17 |只看该作者

回复 #52 whyglinux 的帖子

再顶

论坛徽章:
0
55 [报告]
发表于 2008-04-12 23:33 |只看该作者
LZ要跨平台,对于多CPU系统,若大端小端都有,如下是一个实际系统用的两个基本function.

int byte_to_int(char *ptr)
  {
    unsigned int n;
    int l,i;
    unsigned char c;
    l=sizeof(int);
    n=0;
    for(i=l-1;i>0;i--)
     {
       c=*(ptr+i);
       n|=(unsigned int)c;
       n=n<<8;
     }
    c=*(ptr+i);
    n|=(unsigned int)c;
    return((int)n);
  }

int int_to_byte(char *ptr,int n)
  {
    int l,i;
    unsigned int k;
    k=(unsigned int)n;
    l=sizeof(int);
    for(i=0;i<l;i++)
     {
       *(ptr+i)=(char)(k&(unsigned int)0xff);
       k=k>>8;
     }
    return(n);
  }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP