Цитата(Neytrino @ Oct 17 2009, 23:38)

странно конечно, но правильно не работает...
Что именно не работает? На входе бинарное число, на выходе бинарно-десятичное. Т.е. каждый полубайт (4 бита) содержит число, не превышающее основания 10 (от 0 до 9). Допустим на входе число 1234=0x04D2, на выходе получаем 0x1234. После этого достаточно выделить каждый из полубайтов, прибавить к нему ASCII-код символа '0'=0x30 и можно выводить на экран число в привычном десятичном виде.
Цитата(Neytrino @ Oct 17 2009, 23:38)

может проблема в переменных, которые я поставил, вместо uintl6_t и предположит, что это unsigned int
В стандарте Си нет конкретной размерности у типов переменных. Размерность типов переменных задается в стандартном хедере
limits.h и может отличаться на разных кристаллах и компиляторах. А стандарт лишь гарантирует их отношение
char ≤
short int ≤
int ≤
long int. Чтобы избежать неоднозначности я использовал конкретный тип
uint16_t, который соответствует 16-и битному unsigned int.