| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2022 人关注过本帖
标题:一个关于大端小端字节序的问题!
取消只看楼主 加入收藏
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
结帖率:93.75%
收藏
 问题点数:0 回复次数:2 
一个关于大端小端字节序的问题!
谁还有比这更 简单实用明了易懂 的判断字节序的方法,请教请教!
#include <stdio.h>
typedef union//定义共用体
{
    unsigned short int num;
    unsigned char byte[2];
}type_union;

int main(int argc, char *argv)
{
    type_union order;
    order.num = 0xabcd;
    //小端字节序,低地址低字节,高地址高字节
    if (order.byte[0] == 0xcd && order.byte[1] == 0xab)
    {
        printf("Little endian byte order!\n");
    }
    //大端字节序,低地址高字节,高地址低字节
    if (order.byte[0] == 0xab && order.byte[1] == 0xcd)
    {
     printf("Big endian byte order!\n");
    }
    return 0;
}
搜索更多相关主题的帖子: include 
2012-11-11 03:32
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用beyondyf在2012-11-11 08:03:45的发言:

#include<stdio.h>
int main()
{
    int test = 1;
    if(*(char *)&test)
        printf("Little endian byte order!\n");
    else
        printf("Big endian byte order!\n");
    return 0;
}

嗯,二楼的测试程序的确简单明了易懂,赞!

解释一下(*(char *)&test):首先看到这句,应该从test开始着手,取整形变量test的地址&test,再将此地址强制类型转换成字符指针类型(char *)&test,那么读取这个地址的时候就只读取一字节的内存块数据,即之前的四字节整型内存块被截断,且这一字节的地址在这四字节中就是最低地址,最后取这一字节内存块的数据*(char *)&test。
如果是Little endian,则保存1的那一位必定在这一字节中而且用%d打印出来的值也是1。
如果是Big endian,则保存1的那一位必定不在这一字节中而且这一字节中的每位都是0,用%d打印出来必定是0

现在有两种方案测试大小端字节序了,第一种楼主我的,第二种二楼的,还有没有其他方案呢?

[ 本帖最后由 小小战士 于 2012-11-11 19:26 编辑 ]

小小战士,战士中的战斗机!
2012-11-11 19:18
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
来人,跟帖补充

小小战士,战士中的战斗机!
2012-11-22 12:25
快速回复:一个关于大端小端字节序的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016181 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved