求教如何将下面的结构体转换成unsigned int型数组?

[复制链接]
6164|7
 楼主| craftfox 发表于 2007-8-24 14:39 | 显示全部楼层 |阅读模式
主控器件是44b0,&nbsp;flash是sst39vf3201<br /><br />希望将<br />&nbsp;&nbsp;&nbsp;typedef&nbsp;struct<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;XH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;YHM[8];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsinged&nbsp;logn&nbsp;HH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;TQH[16];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;BXH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;int&nbsp;BYCJ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;BL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;it&nbsp;DL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;YDLB[12];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;int&nbsp;ZTDL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;int&nbsp;DLZJ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;WYJ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;SYYC;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;HJJE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;user<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转换成一个unsigned&nbsp;int型数组。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主要是想将这个结构体的值全部保存到flash器件中,而flash器件只支持写unsigned&nbsp;int型值.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;反过来,如何将存储的这个unsigned&nbsp;int型数组转换成上面这个结构体呢?<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />
nj手术刀 发表于 2007-8-24 15:26 | 显示全部楼层

如下

union{<br />&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mystruct;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;myarray[];<br />}myunion;
lixun00 发表于 2007-8-24 16:01 | 显示全部楼层

晕,最直接就用类型强制转换

  
pppking 发表于 2007-8-24 16:08 | 显示全部楼层

看来一楼的C语言没有学好:)

如果你的结构体如下定义:<br />&nbsp;user&nbsp;a;<br />强制转换:<br />unsigned&nbsp;int&nbsp;*PITemp;<br />PITemp&nbsp;=&nbsp;(&nbsp;unsigned&nbsp;int&nbsp;*)&a;<br /><br />如果需要将数据unsinged&nbsp;int&nbsp;ArrayITemp[&nbsp;];转换成结构体类型,<br />user&nbsp;*PUserA;<br />PUserA&nbsp;=&nbsp;(&nbsp;user&nbsp;*)ArrayITemp;
平常人 发表于 2007-8-24 18:13 | 显示全部楼层

union和类型强制转换都可以,但建议使用union

使用union的好处是:可读性好、有利于借助编译器的查错功能、可移植性好等等。
pppking 发表于 2007-8-25 11:13 | 显示全部楼层

又学会了一招

确实用union使整个程序看起来舒服多了,赞一个
wowow 发表于 2007-8-25 12:17 | 显示全部楼层

没必要用union吧?

一般写flash的函数弄成WriteFlash(u32&nbsp;Addr,u16&nbsp;*DataBuf,u16&nbsp;DataLen)<br />如果要将结构体user_x写入到flash,调用的时候DataBuf参数用(u16&nbsp;*)&user_x就行了。<br /><br />有一种情况才有必要用union:读写flash或cf卡要求按扇区读写时,而结构体大小一般不等于扇区的整数倍,就用:<br />union{<br />&nbsp;&nbsp;u16&nbsp;Buf[((sizeof(MyStruct)+511)/512)/sizeof(u16)];<br />&nbsp;&nbsp;MyStruct&nbsp;StructData;<br />}xxx;<br /><br />如果用union引用起来麻烦,也可以用:<br />u16&nbsp;Buf[((sizeof(MyStruct)+511)/512)/sizeof(u16)];<br />MyStruct&nbsp;*StructData=(MyStruct&nbsp;*)&Buf;<br /><br />
 楼主| craftfox 发表于 2007-8-25 15:49 | 显示全部楼层

谢谢

各位朋友给的建议太好了,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部