HEXA в упакованное преобразование BCD? - PullRequest
0 голосов
/ 01 ноября 2018

Как мне перейти к преобразованию массива uint8, содержащего значения hexa, в упакованные значения bcd? Будет ли работать простой сдвиг на 4 позиции? Если возможно, я буду признателен за несколько примеров в коде, чтобы лучше понять мою проблему

1 Ответ

0 голосов
/ 01 ноября 2018

Следующий код является примером того, как конвертировать. Это помещает цифры 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);
}

(код не возвращает ничего значимого; это всего лишь пример преобразования)

...