jianhong_wu 发表于 2017-8-20 10:36:11

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

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

子非-苏州:
共用体,每一项完全共用内存首地址,我用在对32位寄存器的操作上面,里面的四项很方便操作,比如32位转4个8位:
union t_un32{
unsigned char    un08;
uint16_t   un16;      
uint32_t   un32;
long       sun32;
};
只要存在这个内存里面,就不需要移位转换了。



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

typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ushort;



union      byte_type_t
{
uchar byte;
struct p8_bit
{
char B0:1      ; // 1
char B1:1      ; // 2
char B2:1      ; // 3
char B3:1      ; // 4
char B4:1      ; // 5
char B5:1      ; // 6
char B6:1      ; // 7
char B7:1      ; // 8
}bits;
};


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

union      word_type_t
{
ushort word;
struct p16_bit
{
char bit0:1      ; // 1
char bit1:1      ; // 2
char bit2:1      ; // 3
char bit3:1      ; // 4
char bit4:1      ; // 5
char bit5:1      ; // 6
char bit6:1      ; // 7
char bit7:1      ; // 8
char bit8:1      ; // 9
char bit9:1      ; // 10
char bit10:1      ; // 11
char bit11:1      ; // 12
char bit12:1      ; // 13
char bit13:1      ; // 14
char bit14:1      ; // 15
char bit15:1      ; // 16   
}bits;
};
结构体里面是一个char类型这样写的就可以了。我是做小家电那一块的,占内存是非常关键的。



页: [1]
查看完整版本: 如何用联合与结构体做"32位转4个字节,单字节转8位,双字节转16位“?已解答。