2

符号なし 64 ビット整数を文字列に変換する必要があります。これは Base 36、つまり文字 0 ~ Z です。ulltoa は Linux のマンページには存在しません。しかし、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;
}

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