#include #include #include #include size_t uc_ascii2bcd(const char *ascii, unsigned char *bcdout, unsigned char filler) { unsigned char *bcdp = bcdout; int shift = 0; *bcdp = 0; for(; *ascii; ascii++) { if(*ascii < '0' || *ascii > '9') { continue; } *bcdp |= (*ascii - '0') << shift; if(shift) { bcdp++; *bcdp = 0; } shift = 4 - shift; } if(shift) { *bcdp |= (filler & 0xf) << 4; bcdp++; } return bcdp - bcdout; } static const char hex[] = "0123456789ABCDEF"; size_t uc_bcd2ascii(const unsigned char *bcd, size_t bcdlen, char *asciiout) { size_t i; size_t idx = 0; for(i = 0; i < bcdlen; i++) { asciiout[idx] = hex[bcd[i] & 0xf]; idx++; asciiout[idx] = hex[(bcd[i] & 0xf0) >> 4]; idx++; } asciiout[idx] = 0; return idx; }