我需要将无符号的64位整数转换为字符串。这是在Base 36中,或字符0-Z。 Linux联机帮助页中不存在ulltoa。但是sprintf DOES。如何使用sprintf实现所需的结果?即什么格式化的东西?
或者如果snprintf不起作用,那我该怎么做?
答案 0 :(得分:4)
您可以随时编写自己的转换功能。以下想法是>>受this fine answer启发的:
char * int2base36(unsigned int n, char * buf, size_t buflen)
{
static const char digits[] = "0123456789ABCDEFGHI...";
if (buflen < 1) return NULL; // buffer too small!
char * b = buf + buflen;
*--b = 0;
do {
if (b == buf) return NULL; // buffer too small!
*--b = digits[n % 36];
n /= 36;
} while(n);
return b;
}
这将返回一个指向以null结尾的字符串的指针,该字符串包含n
的base36表示,放置在您提供的缓冲区中。用法:
char buf[100];
std::cout << int2base36(37, buf, 100);
如果你想要并且你是单线程的,你也可以使char缓冲区静态 - 我想你可以找到一个合适的最大长度:
char * int2base36_not_threadsafe(unsigned int n)
{
static char buf[128];
static const size_t buflen = 128;
// rest as above