В цикле:
- Взять число
- Разделить с остатком текущее число на текущую систему счисления (десять, если десятичная)
- К остатку от деления прибавить 0x30 — получим ASCII код числа
- Сохранить код в текущую позицию буфера или отправить куда-то еще
- Установить результат деления как текущее число
- Повторить, пока результат деления не равен нулю
Это общий алгоритм. Есть еще такие варианты и нюансы: как дополнительное форматирование для разных систем счисления, целые/числа с плавающей точкой, отрицательные числа, степени, дроби и прочее.