关于union的奇怪的问题

mondayfriday   2007-9-27 17:03 楼主
大家好,我遇到了一个从没有想到的问题:
union { ulong N; uchar B[4]; } K;
。。。。

   K.N=37534852  //=0x02 3c bc 84
for (i=0;i<4;i++)
{//sbuf[i+4]=K.B;
    sbuf[i+4]=K.B[3-i];//多字节数据按照 高位到低位发送,
  }
在VC中试验:K.B[0]=0x84; K.B[1]= 0x bc;K.B[2]= 0x 3c;K.B[3]= 0x02;
那么sbuf[4]= K.B[3]=  0x02;以此类推。。
可是  pc机接收的单片机数据,sbuf[4]= 0x84= K.B[0],
这是否说明  单片机中的union 结构与别的系统中不同。

谢谢大家,

回复评论 (8)

你的单片机和PC两边的对应关系是怎么的???
点赞  2007-9-27 21:36


每什么!int 、long int 的高低在PC和51中是刚好相反。
点赞  2007-9-28 09:56
每什么!int 、long int 的高低字节在PC和51中是刚好相反。

pc的从低地址到高地址,51的刚好相反,
点赞  2007-9-28 09:59
哦 原来如此,谢谢啦,我这是第一次用单片机啊〉
点赞  2007-9-28 11:16
单片机也是可以选择大小端格式的吧,litter endian和big endian就刚好反了。
点赞  2007-9-29 22:25
把BYTE的地址读出来
点赞  2007-10-10 16:43
印象中KEIL是没有乱改大小端模式的...

点赞  2007-10-10 19:06
不同CPU的litter endian/big endian模式是不同的。
点赞  2007-10-10 20:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复