Я всегда использовал потоки, printf, string(x) или любой другой язык, который предлагался для преобразования числовых типов в строку или обратно. Однако я никогда не задумывался, как это делается на самом деле. Я искал в Google, но все результаты только для использования этих различных методов, а не для того, как преобразование действительно выполняется за кулисами :(
Для целых чисел, использующих двоичные, восьмеричные и шестнадцатеричные числа, кажется довольно простым, поскольку каждая «цифра» в строке представляет собой заданную группу битов (например, для двух шестнадцатеричных цифр я знаю ее xxxxyyyy), поэтому я мог бы сделать это с помощью битовых сдвигов и взять один цифра за раз, например, для шестнадцатеричной строки 0xFA20 значение равно "(15 ‹‹ 12) | (10 ‹‹ 8) | (2 ‹‹ 4) | (0 ‹‹ 0)".
Десятичные целые числа более сложны, поскольку основание 10 не соответствует основанию 2, как это, и поэтому один бит может влиять на более чем одну десятичную цифру, что делает преобразование в обоих направлениях более сложным...
Что касается чисел с плавающей запятой, я действительно понятия не имею. Я предполагаю, что целая и дробная части могут быть рассмотрены отдельно или что-то в этом роде? А как насчет экспоненты, заданного количества значащих цифр или заданного количества десятичных разрядов?