Я хочу преобразовать целое число в строку числовых символов в C.
Я пытался использовать itoa
, но он нестандартный и не предоставляется моей библиотекой C.
Я пытался реализовать свой собственный itoa
, но он не работает должным образом:
#include <stdlib.h>
#include <stdio.h>
char *itoa(int val, char *buf, int base)
{
size_t ctr = 0;
for( ; val; val /= base )
{
buf[ctr++] = '0' + (val % base);
}
buf[ctr] = 0;
return buf;
}
int main(void)
{
unsigned char c = 201;
char *buf = malloc(sizeof(c)*8+1);
itoa(c, buf, 2);
puts(buf);
free(buf);
}
Дает обратный вывод.
Например, если c
равно 'A'
и base
равно 2
, вывод будет таким: 0101101
Вывод, который я хочу получить, будет таким: 1011010
Как мне исправить эту проблему?
Похожие вопросы
Я уже видел этот вопрос: Есть ли конвертер printf для печати в двоичном формате?
Я не хочу, чтобы спецификатор формата printf
выводил целое число как двоичный файл, я хочу преобразовать двоичный файл в строку.
Я уже видел этот вопрос: Вывести int в двоичном представлении, используя C
Хотя ответ преобразует целое число в строку двоичных цифр, это единственное, что он может сделать.
Ограничения
Я хочу, чтобы itoa
мог работать с другими base
с, такими как 10
, 8
и т. Д., И печатать правильно (т. Е. 12345
означает "12345"
, а не * 1051) *).
Я не хочу использовать printf
или sprintf
для этого.
Меня не волнует длина строки, если результат верный.
Я не хочу преобразовывать целое число в символы ASCII, кроме числовых, за исключением base
с больше 10, в этом случае символы могут быть буквенно-цифровыми.
Ответ должен точно соответствовать этому прототипу:
char *itoa(int val, char *buf, int base);
Может существовать функция с именем nitoa
, которая имеет этот прототип и возвращает количество символов, необходимое для хранения результата itoa
:
size_t nitoa(int val, int base);