Hao_ni
驱动牛犊
驱动牛犊
  • 注册日期2002-02-15
  • 最后登录2005-02-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2271回复:8

GCC.ARM.little endian.恳请本论坛最强者进!

楼主#
更多 发布于:2003-07-18 15:10
环境:GCC编译器,ARM7TDMI,Little endian.
问题描述:
定义了一个数据结构,字符数组.当我从这个数组中
#include <stdio.h>
struct AS
{
    unsigned long l;
};
void TT()
{
    char buf[]={0x01,0x02,0x03,0x04,0x05};
    AS* as=(AS*)(buf+1);    //将char类型强制转换为无符号长整型
    printf(\"%X\\n\",as->l);
}

int main()
{
    TT();
}

结果如下:

5040302

以上是x86+windows+gcc的结果

在ARM+gcc+ucos上的结果却非常奇怪

#include <stdio.h>

struct AS
{
    unsigned long l;
};

void TT()
{
    char buf[]={0x01,0x02,0x03,0x04,0x05};
    AS* bs=(AS*)(buf+1);
    printf(\"%X\\n\",bs->l);
}

int main()
{
    TT();
}
在x86+windows下结果是:             05040302
可是在ARM7+gcc编译器上结果是:   02050403

为什么会这样?兄弟们可以提供一点看法么?
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-07-18 22:29
可能跟buf地址对齐有关。
Hao_ni
驱动牛犊
驱动牛犊
  • 注册日期2002-02-15
  • 最后登录2005-02-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-19 12:30
I just want to know how to resolve this problem?
OS_Dev
驱动中牛
驱动中牛
  • 注册日期2002-01-09
  • 最后登录2004-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-20 15:05
I just want to know how to resolve this problem?


没有人能给你解决问题,最多只能给你些提示。
I know nothing!
Hao_ni
驱动牛犊
驱动牛犊
  • 注册日期2002-02-15
  • 最后登录2005-02-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-20 21:48
问题已经搞定了.
mYthorON
驱动牛犊
驱动牛犊
  • 注册日期2003-02-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望16点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-21 17:16
问题已经搞定了.

为什么不把你解决的办法写出来大家交流呢?
Impossible Is Nothing.
new_bear
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2003-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-30 14:20
这是一个不同构架的计算机的存储方式产生的问题,
x86是little endian
arm是big endian
知道了就容易解决了
bodajingshen000
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2009-01-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-29 08:45
arm 在两种方式下都可以使用
redhue
驱动牛犊
驱动牛犊
  • 注册日期2004-01-09
  • 最后登录2005-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-03 17:14
可是即便是bigendian的arm模式也不会是你的结果啊

×××在ARM7+gcc编译器上结果是: 02050403×××

应该是0x02030405才对,你有没有测过啊

游客

返回顶部