用过的BYTE、CHAR、USHORT、ULONG 转换

文章详细介绍了C语言中用于BCD数(二进制补码十进制)与十进制整数之间的转换宏定义,如BCD_TO_INT和INT_TO_BCD,以及字节到无符号长整型和无符号短整型的转换函数。
摘要由CSDN通过智能技术生成

#define   BCDH_TO_INT(bcd)  (((bcd) & 0xF0) >> 4)//0x35->3
#define   BCDL_TO_INT(bcd)  ((bcd) & 0x0F)0x35->5
#define   BCD_TO_INT(bcd)   (BCDH_TO_INT(bcd) * 10 + BCDL_TO_INT(bcd))//0x51->51
#define   INT_TO_BCD(i)     (((unsigned char)((i)/10)<<4) |((i)%10))//51->0x51
#define   INTSTR_TO_BCD(a,b)   ((((a) - 0x30)<<4) | ((b) - 0x30))//('5','1')->0x51


#define   BYTE4_TO_ULONG(B4,B3,B2,B1)   (((unsigned long)(B4) <<24) |((unsigned long)(B3) <<16) |((unsigned long)(B2) <<8) | ((unsigned long)(B1)))//(1,2,3,4)->0x01020304
#define   ULONG_BYTE_N(l,n) ((((unsigned long)l)>>(n*8))&0xFF)//n(0:3)  举例 ULONG_BYTE_N(0x12345678,1) = 0x56
    
#define   BYTE2_TO_USHORT(H,L)   (((unsigned short)(H) <<8) | ((unsigned short)(L)))//(5,1)->0x0501
#define   USHORT_BYTE_N(l,n) ((((unsigned short)l)>>(n*8))&0xFF)//n(0:1)   举例 ULONG_BYTE_N(0x5678,1) = 0x56
    
#define BCDH_TO_INTCHAR(n) (BCDH_TO_INT(n) +0x30)//0x35->0x33
#define BCDL_TO_INTCHAR(n) (BCDL_TO_INT(n) +0x30)//0x35->0x35

#define MARK_BIT(n) (1<<n)
#define abs_reduce(a,b)  ((a>b)?(a-b):(b-a))//abs_reduce(1,3)  = abs_reduce(3,1) =2

#define U16_H(x) ((unsigned char)(x>>8))//0x5678->0x56
#define U16_L(x) ((unsigned char)(x&0x00ff))//0x5678->0x78

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dashan_na

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值