eric.sd
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-11-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1471回复:2

涉及到bigEndian和littleEndian结构转换的问题

楼主#
更多 发布于:2004-02-27 17:54
很多时候在移值驱动的时候都会遇到芯片手册中的结构在不同CPU下的重组问题。

比如 在Window下定义结构(little Endian)
struct TypeA {
   unsigned long a:1;
   unsigned long b:1;
   unsigned long c:3;
   unsigned long d:3;

   unsigned long e:1;
   unsigned long f:1;
   unsigned long g:1;
   unsigned long h:1;
   unsigned long i:1;
   unsigned long j:2;
   unsigned long k:1;
   unsigned long l:12;
   unsigned long m:1;
   unsigned long m:1
};

在BigEndian结构下怎么定义结构才能使数据保持一致呢?
eric.sd
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-11-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-27 17:55
很多时候在移值驱动的时候都会遇到芯片手册中的结构在不同CPU下的重组问题。

比如 在Window下定义结构(little Endian)
struct TypeA {
   unsigned long a:1;
   unsigned long b:1;
   unsigned long c:3;
   unsigned long d:3;

   unsigned long e:1;
   unsigned long f:1;
   unsigned long g:1;
   unsigned long h:1;
   unsigned long i:1;
   unsigned long j:2;
   unsigned long k:1;
   unsigned long l:12;
   unsigned long m:1;
   unsigned long n:3;
};

在BigEndian结构下怎么定义结构才能使数据保持一致呢?


修改一下新的结构如上
eric.sd
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-11-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-27 18:07
我们知道一个结构 在不同的compiler下其在内存中的map是不一样的。

比如在VC(little Endian)
struct TypeA {
unsigned long a:1;
unsigned long b:1;
unsigned long c:3;
unsigned long d:3;

unsigned long e:1;
unsigned long f:1;
unsigned long g:1;
unsigned long h:1;
unsigned long i:1;
unsigned long j:2;
unsigned long k:1;
unsigned long l:12;
unsigned long m:1;
unsigned long n:3;
}

在Window下(little Endian)其在内存中的Map为:
n|m|l|k|j|i|h|g|f|e|d|c|b|a


而在MIPS下(Big Endian)其在内存中的Map为:
a|b|c|d|e|f|g|h|i|j|k|l|m|n;

这些都是编译器造成的影响;


游客

返回顶部