我需要将无符号的 64 位整数转换为字符串。那是在 Base 36 或字符 0-Z 中。Linux 联机帮助页中不存在 ulltoa。但是 sprintf 可以。如何使用 sprintf 来达到预期的效果?即什么格式的东西?
或者如果 snprintf 不起作用,那我该怎么做?
您始终可以编写自己的转换函数。以下想法是从这个很好的答案中大量启发而来的:
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;
}
这将返回一个指向以空字符结尾的字符串的指针,该字符串包含 的 base36 表示n
,放置在您提供的缓冲区中。用法:
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