我想在 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
is'A'
和base
is 2
,输出是这样的:0101101
我想要的输出是这样的:1011010
我该如何解决这个问题?
类似问题
我已经看到了这个问题:Is there a printf converter to print in binary format?
我不希望printf
格式说明符将整数打印为二进制,我想将二进制转换为字符串。
我已经看过这个问题:Print an int in binary representation using C
尽管答案确实将整数转换为二进制数字字符串,但这是它唯一可以做的事情。
限制
我希望itoa
能够与其他base
s 一起工作,例如10
,8
等并正确打印(即12345
转换为"12345"
而不是转换为"11000000111001"
)。
我不想使用printf
或sprintf
这样做。
我不关心字符串的长度,只要结果是正确的。
我不想将整数转换为数字以外的 ASCII 字符,除了base
大于 10 的 s 除外,在这种情况下,字符可能是字母数字。
答案必须完全符合这个原型:
char *itoa(int val, char *buf, int base);
可能有一个被调用的函数nitoa
具有此原型并返回保存结果所需的字符数itoa
:
size_t nitoa(int val, int base);