阅读:2358回复:8
GCC.ARM.little endian.恳请本论坛最强者进!
环境: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 为什么会这样?兄弟们可以提供一点看法么? |
|
沙发#
发布于:2003-07-18 22:29
可能跟buf地址对齐有关。
|
|
板凳#
发布于:2003-07-19 12:30
I just want to know how to resolve this problem?
|
|
地板#
发布于:2003-07-20 15:05
I just want to know how to resolve this problem? 没有人能给你解决问题,最多只能给你些提示。 |
|
|
地下室#
发布于:2003-07-20 21:48
问题已经搞定了.
|
|
5楼#
发布于:2003-07-21 17:16
问题已经搞定了. 为什么不把你解决的办法写出来大家交流呢? |
|
|
6楼#
发布于:2003-07-30 14:20
这是一个不同构架的计算机的存储方式产生的问题,
x86是little endian arm是big endian 知道了就容易解决了 |
|
7楼#
发布于:2004-09-29 08:45
arm 在两种方式下都可以使用
|
|
8楼#
发布于:2004-10-03 17:14
可是即便是bigendian的arm模式也不会是你的结果啊
×××在ARM7+gcc编译器上结果是: 02050403××× 应该是0x02030405才对,你有没有测过啊 |
|