独闷闷网
标题:
如何用联合与结构体做"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位:
union t_un32{
unsigned char un08[4];
uint16_t un16[2];
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类型这样写的就可以了。我是做小家电那一块的,占内存是非常关键的。
欢迎光临 独闷闷网 (http://dumenmen.com/)
Powered by Discuz! X3.2