#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