Преобразовать целое число в строку - PullRequest
1 голос
/ 25 августа 2011

Я пытаюсь выучить ассемблер и хочу написать функцию для преобразования числа в строку. Сигнатура функции, которую я хочу написать, будет выглядеть следующим образом в стиле C:

int numToStr(long int num, unsigned int bufLen, char* buf)

Функция должна возвращать количество байтов, которые использовались в случае успешного преобразования, и 0 в противном случае.

Мой текущий подход - простой алгоритм. Во всех случаях, если буфер заполнен, вернуть 0.

  1. Проверьте, не отрицательно ли число. Если это так, запишите - char в buf[0] и увеличьте текущее место в буфере
  2. Повторно делить на 10 и хранить остатки в буфере, пока деление не даст 0.
  3. Обратный номер в буфере.

Это лучший способ сделать это преобразование?

1 Ответ

2 голосов
/ 25 августа 2011

Это в значительной степени то, как работает каждая реализация itoa, которую я видел.

Одна вещь, о которой вы не упоминаете, но о которой хотите позаботиться, это проверка границ (т.е.Вы не пишете мимо bufLen).

Что касается знака: после того, как вы написали -, вам нужно отрицать значение.Кроме того, - необходимо исключить из окончательного разворота;альтернативой является запоминание знака в начале, но только запись в конце (непосредственно перед изменением).

Один последний крайний случай - убедиться, что ноль записан правильно, то есть как 0а не как пустая строка.

...