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