gpt4 book ai didi

c++ - 用 36 的基数/基数模拟 ulltoa()

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:20 24 4
gpt4 key购买 nike

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

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

最佳答案

您始终可以只编写自己的转换函数。以下想法是中窃取的,深受 this fine answer 的启发:

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;
}

这将返回一个指向以 null 结尾的字符串的指针,该字符串包含 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

关于c++ - 用 36 的基数/基数模拟 ulltoa(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com