HEXA в упакованное преобразование BCD?
Как мне перейти к преобразованию массива uint8, содержащего значения hexa, в упакованные значения bcd? Будет ли работать простой сдвиг на 4 позиции? Если возможно, я буду признателен за несколько примеров в коде, чтобы лучше понять мою проблему
1 ответ
Следующий код является примером того, как конвертировать. Это помещает цифры BCD в 4-битные кусочки, как s="4660"
==> bcd[]= {0x46, 0x60}
void toBCD(int x)
{
int nchars, k;
char s[20], *cp=s;
unsigned char b, bcd[20], *p=bcd;
nchars= sprintf(s,"%d",x);
k=0;
while (*cp) {
b = (unsigned char)(*cp++ - '0');
if (k==0) {
*p= b;
k= 1;
}
else {
*p= (*p<<4) | b; //shift left and put in right nibble
p++;
k= 0;
}
}
if (k==1)
*p= (*p<<4);
}
(код не возвращает ничего значимого; это просто пример преобразования)