打印

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

[复制链接]
4919|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
craftfox|  楼主 | 2007-8-24 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主控器件是44b0, flash是sst39vf3201

希望将
   typedef struct
      {
            int XH;
            char YHM[8];
            unsinged logn HH;
            char TQH[16];
            int BXH;
            long int BYCJ;
            int BL;
            long it DL;
            char YDLB[12];
            long int ZTDL;
            long int DLZJ;
            float WYJ;
            float SYYC;
            float HJJE;
        } user

      转换成一个unsigned int型数组。
      主要是想将这个结构体的值全部保存到flash器件中,而flash器件只支持写unsigned int型值.

      反过来,如何将存储的这个unsigned int型数组转换成上面这个结构体呢?
    

相关帖子

沙发
nj手术刀| | 2007-8-24 15:26 | 只看该作者

如下

union{
    user        mystruct;
    unsigned int myarray[];
}myunion;

使用特权

评论回复
板凳
lixun00| | 2007-8-24 16:01 | 只看该作者

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

使用特权

评论回复
地板
pppking| | 2007-8-24 16:08 | 只看该作者

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

如果你的结构体如下定义:
 user a;
强制转换:
unsigned int *PITemp;
PITemp = ( unsigned int *)&a;

如果需要将数据unsinged int ArrayITemp[ ];转换成结构体类型,
user *PUserA;
PUserA = ( user *)ArrayITemp;

使用特权

评论回复
5
平常人| | 2007-8-24 18:13 | 只看该作者

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

使用union的好处是:可读性好、有利于借助编译器的查错功能、可移植性好等等。

使用特权

评论回复
6
pppking| | 2007-8-25 11:13 | 只看该作者

又学会了一招

确实用union使整个程序看起来舒服多了,赞一个

使用特权

评论回复
7
wowow| | 2007-8-25 12:17 | 只看该作者

没必要用union吧?

一般写flash的函数弄成WriteFlash(u32 Addr,u16 *DataBuf,u16 DataLen)
如果要将结构体user_x写入到flash,调用的时候DataBuf参数用(u16 *)&user_x就行了。

有一种情况才有必要用union:读写flash或cf卡要求按扇区读写时,而结构体大小一般不等于扇区的整数倍,就用:
union{
  u16 Buf[((sizeof(MyStruct)+511)/512)/sizeof(u16)];
  MyStruct StructData;
}xxx;

如果用union引用起来麻烦,也可以用:
u16 Buf[((sizeof(MyStruct)+511)/512)/sizeof(u16)];
MyStruct *StructData=(MyStruct *)&Buf;

使用特权

评论回复
8
craftfox|  楼主 | 2007-8-25 15:49 | 只看该作者

谢谢

各位朋友给的建议太好了,谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

8

帖子

0

粉丝