天天看點

進制轉換小函數實作,十進制轉16進制,char轉bcd碼等

#include <stdint.h>

#include "convert.h"

unsigned bcd2bin(unsigned char val)//11 : 0x11

{

    return (val & 0x0f) + (val >> 4) * 10;

}

unsigned char bin2bcd(unsigned char val)//0x11 :11/10*16+1 = 17

{

    if(val==0)

        return 0;

    else

        return ((val / 10) *16) + val % 10;

}

uint8_t ascii2bcd(uint8_t *str)

{

    return (((*str - '0')<<4)+(*(str+1) - '0'));

}

uint8_t numAsscci2bin(uint8_t a){//

    if(a >= 0x30 && a <= 0x39)

        return (uint8_t)(a - '0');

    else if(a >= 0x41 && a<= 0x46)

        return (a - 0x37);//這裡應該減去0x37,否則算出來

    else if(a >= 0x61 && a<= 0x66)

        return (a - 0x57