独闷闷网

标题: 如何用联合与结构体做"32位转4个字节,单字节转8位,双字节转16位“?已解答。 [打印本页]

作者: jianhong_wu    时间: 2017-8-20 10:36
标题: 如何用联合与结构体做"32位转4个字节,单字节转8位,双字节转16位“?已解答。
本帖最后由 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类型这样写的就可以了。我是做小家电那一块的,占内存是非常关键的。








欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2