我需要將無符號的64位整數轉換爲字符串。這是在基地36,或字符0-Z。 ulltoa在Linux手冊頁中不存在。但是sprintf可以。我如何使用sprintf來達到預期的效果?即什麼格式化%的東西?模擬ulltoa()的基數/ 36基數
或者如果snprintf不起作用,那麼我該怎麼做?
我需要將無符號的64位整數轉換爲字符串。這是在基地36,或字符0-Z。 ulltoa在Linux手冊頁中不存在。但是sprintf可以。我如何使用sprintf來達到預期的效果?即什麼格式化%的東西?模擬ulltoa()的基數/ 36基數
或者如果snprintf不起作用,那麼我該怎麼做?
您可以隨時編寫自己的轉換函數。下面的想法是從通過嚴重this fine answer啓發被盜:
char * int2base36(unsigned int n, char * buf, size_t buflen)
{
static const char digits[] = "ABCDEFGHI...";
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 * int2base36_not_threadsafe(unsigned int n)
{
static char buf[128];
static const size_t buflen = 128;
// rest as above
這假設緩衝區在開始處充滿了NULL。如果你有一個大小爲32的緩衝區,並且你使用這個函數並且打印緩衝區並且緩衝區沒有充滿空值,它將打印緩衝區的大小(但不是更多)。 –
此函數還接受'unsigned int',它不是(我假設)在32位系統上的64位。應該是'unsigned long long'吧? –
非常好,非常漂亮。 –
可能重複[sprintf爲unsigned _int64](http://stackoverflow.com/questions/5140871/sprintf-for-unsigned-int64) – 2011-08-28 01:31:49
@Code這是特別基地36,我不認爲這是一個重複。 –
不要以爲你可以使用sprintf來做到這一點 – fpmurphy1