免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1648 | 回复: 3
打印 上一主题 下一主题

字节顺序问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-09 17:42 |只看该作者 |倒序浏览
字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,有小端、

大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数

据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数

据存放在高地址处,通过测试SCO UNIX 5.0.6 为小端,但通过od 命令读取写

入的信息却发现低字节数据存放在内存高地址处,程序如下(在SCO UNIX 5.0.6

上进行测试)


include <stdio.h>
#include <stdlib.h>

int IsLittleEndian()
{
        FILE *fp;
        int rv;
        unsigned int usData = 0x1234;
        unsigned char *pucData = (unsigned char*)&usData;

        fp = fopen("dat", "wb");
                if (fp == NULL) {
                                printf("fopen error\n");
                return -1;
        }

        rv = fwrite(&usData, sizeof(usData), 1, fp);
        if (rv != 1) {
                printf("fwrite error\n");
                return -1;
        }
               fclose(fp);

        if(*pucData == 0x34)
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

#od -Ad -hc ./dat  运行结果如下:
000000     1234    0000
                 4 022  \0  \0
0000004
我认为那应该是如下结果才正确,但实际结果如上所示
000000     3412    0000
                 022 4   \0  \0
0000004
请那位大虾能解释解释,谢谢了.

论坛徽章:
0
2 [报告]
发表于 2007-12-10 10:04 |只看该作者
你这个太繁琐了,给个简单的
int x = 1;
    if(*(char *)&x == 1)
        printf("little-endian\n");
    else
        printf("big-endian\n");

论坛徽章:
0
3 [报告]
发表于 2007-12-10 19:55 |只看该作者
判断大小端方法当然很多,有简单有复杂的,但我现在想问的是为什么od 命令显示的结果不是小端所要显示的结果?

论坛徽章:
0
4 [报告]
发表于 2007-12-10 20:26 |只看该作者
原帖由 cust 于 2007-12-9 17:42 发表 #od -Ad -hc ./dat  运行结果如下:
000000     1234    0000
                 4 022  \0  \0
0000004
我认为那应该是如下结果才正确,但实际结果如上所示
000000     3412    0000
                 022 4   \0  \0
0000004
请那位大虾能解释解释,谢谢了.


...


0x12 = 012
0x34 = ?

od 的输出是正确的, 它的第一行是按双字节输出的,所以是

1234    0000

它的第二行是按单字符输出的,所以是

4 022 \0 \0
   (0x12)

你认为的第二行是错的。


要使 od 单字节输出,用参数 -t o1

od -t o1 dat
0000000 064 022 000 000
0000004
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP