2

我需要将无符号的 64 位整数转换为字符串。那是在 Base 36 或字符 0-Z 中。Linux 联机帮助页中不存在 ulltoa。但是 sprintf 可以。如何使用 sprintf 来达到预期的效果?即什么格式的东西?

或者如果 snprintf 不起作用,那我该怎么做?

4

1 回答 1

4

您始终可以编写自己的转换函数。以下想法是这个很好的答案中大量启发而来的:

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
于 2011-08-28T01:37:38.573 回答