Есть на С (метод сдвига и десятичной коррекции, возможно,самый быстрый для BCD преобразования).
Описание метода - в книге Титце,Шенк Полупроводниковая схемотехника, стр.320 (
http://www.cqham.ru/lib.htm)
Функция bin2bcd32 - преобразование binary -> packed bcd (num_bytes - количество байтов на выходе)
Код
uint32_t bin2bcd32(uint32_t num, uint8_t num_bytes) /**< \brief Convert uint32_t num to packed BCD using num_bytes of number - universal \ingroup ul_math */
{uint32_t ul1=0; /*result*/
uint8_t uc1;
for (uc1=(4-num_bytes);uc1;uc1--) num<<=8; /*adjust input bytes*/
for (uc1=(num_bytes<<3);uc1;uc1--) /*bit shift loop*/
{uint8_t uc2,uc3;
/*BCD nibbles correction*/
ul1+=0x33333333;
for (uc3=4;uc3;uc3--)
{uc2=(uint8_t)(ul1>>24);
if (!(uc2&0x08)) uc2-=0x03;
if (!(uc2&0x80)) uc2-=0x30;
ul1=ul1<<8; ul1|=uc2;
}
/*shift next bit of input and result*/
ul1<<=1;
if ((num>>24)&0x80) ul1|=1;
num<<=1;
}
return(ul1);
}
Сообщение отредактировал umup - Jan 12 2007, 15:47