独闷闷网

 找回密码
 立即注册
搜索
查看: 3146|回复: 0
收起左侧

[原创] 如何用联合与结构体做"32位转4个字节,单字节转8位,双字节转16位“?已解答。

[复制链接]
发表于 2017-8-20 10:36:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 jianhong_wu 于 2017-8-20 10:37 编辑

子非-苏州:
共用体,每一项完全共用内存首地址,我用在对32位寄存器的操作上面,里面的四项很方便操作,比如32位转4个8位:
  1. union t_un32{
  2. unsigned char    un08[4];
  3. uint16_t   un16[2];        
  4. uint32_t   un32;
  5. long       sun32;
  6. };
复制代码

只要存在这个内存里面,就不需要移位转换了。



怀念依旧-顺德:
单字节转8位,如下:

  1. typedef unsigned char uchar;
  2. typedef unsigned int uint;
  3. typedef unsigned long ushort;



  4. union        byte_type_t
  5. {
  6. uchar byte;
  7. struct p8_bit
  8. {
  9.   char B0:1        ; // 1
  10.   char B1:1        ; // 2
  11.   char B2:1        ; // 3
  12.   char B3:1        ; // 4
  13.   char B4:1        ; // 5
  14.   char B5:1        ; // 6
  15.   char B6:1        ; // 7
  16.   char B7:1        ; // 8
  17. }  bits;
  18. };
复制代码


双字节转16位,如下:
  1. typedef volatile union byte_type_t BYTE;

  2. union        word_type_t
  3. {
  4. ushort word;
  5. struct p16_bit
  6. {
  7.   char bit0:1        ; // 1
  8.   char bit1:1        ; // 2
  9.   char bit2:1        ; // 3
  10.   char bit3:1        ; // 4
  11.   char bit4:1        ; // 5
  12.   char bit5:1        ; // 6
  13.   char bit6:1        ; // 7
  14.   char bit7:1        ; // 8
  15.   char bit8:1        ; // 9
  16.   char bit9:1        ; // 10
  17.   char bit10:1        ; // 11
  18.   char bit11:1        ; // 12
  19.   char bit12:1        ; // 13
  20.   char bit13:1        ; // 14
  21.   char bit14:1        ; // 15
  22.   char bit15:1        ; // 16   
  23. }  bits;
  24. };
复制代码

结构体里面是一个char类型这样写的就可以了。我是做小家电那一块的,占内存是非常关键的。



乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-3-29 00:19 , Processed in 0.154382 second(s), 18 queries .

快速回复 返回顶部 返回列表