高低字位的取值宏

一、定义

在VC6.0的Microsoft Visual Studio/VC98/Include/windef.h 里,定义了BYTE,WORD,DWORD

typedef unsigned long       DWORD;

typedef unsigned char       BYTE;

typedef unsigned short      WORD;

在Visual C++ 6.0中,char型长度为1字节,short型长度为2字节,int和long型长度都为4字节,因此可以认为BYTE与WORD,DWORD定义的变量分别获得了1字节,2字节,4字节内存,正与BYTE与WORD,DWORD的字面意义相符。

即:

BYTE=unsigned char(完全等同):       8位

WORD=unsigned short(完全等同):  16位

DWORD=unsigned long(完全等同): 32位

 

 

 

下面是一些平时用得比较少的宏:

二、Window 宏

1.LOBYTE( 从给定16位值中提取低位字节)

BYTE LOBYTE(

  WORD wValue  // value from which low-order byte is retrieved

);

#define LOBYTE(w)   ((BYTE) (w))

如:WORD w=-0x1234;//w在内存中以补码形式存储:0xedcc,即0xcc(低地址) 0xed(高地址)

printf("w的低位字节:%x/n",LOBYTE(w));//输 出:w的低位字节:cc

 

2.HIBYTE( 从给定16位值中提取高位字节)

BYTE HIBYTE(

  WORD wValue  // value from which high-order byte is retrieved

);

#define HIBYTE(w)   ((BYTE) (((WORD) (w) >> 8) & 0xFF))

如:printf("w的高位字节:%x/n",HIBYTE(w));// 输出:w的高位字节:ed

 

3.LOWORD(从给定32位值中提取低位word)

WORD LOWORD(

  DWORD dwValue  // value from which low-order word is retrieved

);

#define LOWORD(l)   ((WORD) (l))

如: DWORD l = 0x12345678;//l在内存中存储为:0x78,0x56,0x34,0x12

printf("l的低位字:%x/n",LOWORD(l));// 输出:l的低位字:5678

 

4.HIWORD(从给定32位值中提取高位word)

WORD HIWORD(

  DWORD dwValue  // value from which high-order word is retrieved

);

#define HIWORD(l)   ((WORD) (((DWORD) (l) >> 16) & 0xFFFF))

如:printf("l的高位字:%x/n",HIWORD(l));//输出:l的高位字:1234

5.MAKEWORD(将两个给定的无符号字符值连接成为一个16位整数)

WORD MAKEWORD(

  BYTE bLow,  // low-order byte of short value

  BYTE bHigh  // high-order byte of short value

);

#define MAKEWORD(a, b) /

((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8))

如: BYTE bLow=0x34,bHigh=0x12;

printf("MAKEWORD(%x,%x)=%x/n",bLow,bHigh,MAKEWORD(bLow,bHigh));

输出结果为: MAKEWORD(34,12)=1234

 

6.MAKELONG(将两个给定的16位值连接成为一个32位整数)

DWORD MAKELONG(

  WORD wLow,  // low-order word of long value

  WORD wHigh  // high-order word of long value

);

#define MAKELONG(a, b) /

    ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))

 

如:WORD vLow=0x5678,vHigh=0x1234;

printf("MAKELONG(%x,%x)=%x/n",vLow,vHigh,MAKELONG(vLow,vHigh));

输出结果:MAKELONG(5678,1234)=12345678

/** * @file drv_bsp.h * @author yssickjgd (1345578933@qq.com) * @brief A板的板级支持包 * @version 0.1 * @date 2022-08-02 * * @copyright USTC-RoboWalker (c) 2022 * */ #ifndef DRV_BSP_H #define DRV_BSP_H /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_hal.h" /* Exported macros -----------------------------------------------------------*/ //初始化DC24被按位或的参 #define BSP_DC24_LU_ON (1 << 0) #define BSP_DC24_LD_ON (1 << 1) #define BSP_DC24_RU_ON (1 << 2) #define BSP_DC24_RD_ON (1 << 3) //初始化颜色LED被按位或的参 #define BSP_LED_R_ON (1 << 4) #define BSP_LED_G_ON (1 << 5) //初始化并排LED被按位或的参 #define BSP_LED_1_ON (1 << 6) #define BSP_LED_2_ON (1 << 7) #define BSP_LED_3_ON (1 << 8) #define BSP_LED_4_ON (1 << 9) #define BSP_LED_5_ON (1 << 10) #define BSP_LED_6_ON (1 << 11) #define BSP_LED_7_ON (1 << 12) #define BSP_LED_8_ON (1 << 13) /* Exported types ------------------------------------------------------------*/ /** * @brief 板上DC24工作状态 * */ enum Enum_BSP_DC24_Status { BSP_DC24_Status_DISABLED = 0, BSP_DC24_Status_ENABLED, }; /** * @brief 板上LED工作状态 * */ enum Enum_BSP_LED_Status { BSP_LED_Status_ENABLED = 0, BSP_LED_Status_DISABLED, }; /* Exported variables --------------------------------------------------------*/ /* Exported function declarations --------------------------------------------*/ void BSP_Init(uint32_t Status, float IMU_Heater_Rate = 0, float Buzzer_Rate = 0); void BSP_DC24_LU(Enum_BSP_DC24_Status Status); void BSP_DC24_LD(Enum_BSP_DC24_Status Status); void BSP_DC24_RU(Enum_BSP_DC24_Status Status); void BSP_DC24_RD(Enum_BSP_DC24_Status Status); void BSP_LED_R(Enum_BSP_LED_Status Status); void BSP_LED_G(Enum_BSP_LED_Status Status); void BSP_LED_1(Enum_BSP_LED_Status Status); void BSP_LED_2(Enum_BSP_LED_Status Status); void BSP_LED_3(Enum_BSP_LED_Status Status); void BSP_LED_4(Enum_BSP_LED_Status Status); void BSP_LED_5(Enum_BSP_LED_Status Status); void BSP_LED_6(Enum_BSP_LED_Status St
最新发布
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值