单片机中的类型转换

#include<stdio.h>
#define uint8 unsigned char
#define uint32 unsigned int

#define BREAK_UINT32( var, ByteNum ) \
          (uint8)((uint32)(((var) >>((ByteNum) * 8)) & 0x00FF))

#define BUILD_UINT32(Byte0, Byte1, Byte2, Byte3) \
          ((uint32)((uint32)((Byte0) & 0x00FF) \
          + ((uint32)((Byte1) & 0x00FF) << 8) \
          + ((uint32)((Byte2) & 0x00FF) << 16) \
          + ((uint32)((Byte3) & 0x00FF) << 24)))
int main(){
    uint8 temp[4] = {0x01,0x02,0x03,0x04};
    uint32 tevalu = 0;
    
    tevalu = BUILD_UINT32(temp[0],temp[1],temp[2],temp[3]);
    printf("---%08x-------\n",tevalu);
    
    uint8 temp2[4] = {0x0};
    temp2[0] = BREAK_UINT32(tevalu,0);
    temp2[1] = BREAK_UINT32(tevalu,1);
    temp2[2] = BREAK_UINT32(tevalu,2);
    temp2[3] = BREAK_UINT32(tevalu,3);
    
    printf("--%02x--%02x--%02x--%02x--\n",temp2[0],temp2[1],temp2[2],temp2[3]);
    
    return 0;
}
还有一些常用的宏定义,这里加上

#define BUILD_UINT16(loByte, hiByte) \
          ((uint16)(((loByte) & 0x00FF) + (((hiByte) & 0x00FF) << 8)))

#define HI_UINT16(a) (((a) >> 8) & 0xFF)
#define LO_UINT16(a) ((a) & 0xFF)

#define BUILD_UINT8(hiByte, loByte) \
          ((uint8)(((loByte) & 0x0F) + (((hiByte) & 0x0F) << 4)))

#define HI_UINT8(a) (((a) >> 4) & 0x0F)
#define LO_UINT8(a) ((a) & 0x0F)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值