当前位置: 代码迷 >> 综合 >> #define BYTE0(dwTemp) ( *( (char *)(dwTemp) ) )是什么意思?
  详细解决方案

#define BYTE0(dwTemp) ( *( (char *)(dwTemp) ) )是什么意思?

热度:99   发布时间:2023-12-13 00:18:09.0

1.数据拆分宏定义

#define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)    ) )
#define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) )

在通讯中经常需要把数据拆成字节的形式,有多种方法这里是其中一种比较好用的方法。

大致的处理过程是 对变量 dwTemp 去地址,然后将其强制转化成char类型的指针  最后再取出指针所指向的内容,这样就完成了对数据的拆分工作。

能完成这种功能的还有种写法就是利用结构体,准确说是联合体示例如下:

typedef union 
{uint16_t u16_vale;uint8_t bytes[2];
}u16_type_u;int mian ()
{u16_type_u u16;u16.bytes[0] = 10;u16.bytes[1] = 1;printf ("%d \n",&u16.u16_value);return 0;
}

以上均可以完成数据的拆分工作。

2.充当内联函数使用

示例如下:

#define LED1(a)	if (a)	\GPIO_SetBits(GPIOB,GPIO_Pin_0);\else		\GPIO_ResetBits(GPIOB,GPIO_Pin_0)

关于内联函数,有如下示例大致可说明含义

inline int max (int i ,int j, int k)
{if (i<j)i = j;if  (i<k)i = k;return i;
}

 

  相关解决方案