模拟ulltoa(),基数/底数为36
simulate ulltoa() with a radix/base of 36
我需要将一个无符号64位整数转换为字符串。也就是36进制,或者0-Z字符。Linux手册中不存在ulltoa。但sprint做到了。我如何使用冲刺来达到预期的结果?例如,格式化%的东西?
或者如果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;
}
这将返回一个指针,指向一个以null结尾的字符串,该字符串包含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
相关文章:
- 函数在许多数字上转换为基数 1 时减去 2?
- 以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- 以 10 c++ 为基数显示 1024 位二进制数
- 计算负基数的正非整数幂
- Qt 将字符串转换为以 16 为基数的 int,但保留以 16 为基数的值
- C++:根据int值的基数使用条件格式打印
- 如何编写一个程序来打印特定基数的前N个数字
- 虚拟继承中来自基数的虚拟调用
- 在 c++ 中使用 wtoi 和基数
- BigInteger:在 C++ 中使用 ofstream 写入文件时如何将基数更改为 2?
- 将大十六进制数转换为十进制形式(以 10 为基数的形式)的算法
- 如何在以 256 为基数的唯一 xLen-digit 表示中写一个整数 x?
- 实现可以<T>转换为 Stream 的 Stream,<U>其中 U 是 T 的基数
- 如何将大型二进制文件(10000k 位)转换为基数 3 或基数 31?
- 从具有相同基数的另一个派生类调用派生类的非 const 方法
- decltype 所需的不完整类型的派生到基数转换
- 从子类到具有相同基数的抽象子类的隐式转换
- 用字母打印以 10-16 为基数(我被困在一个必须打印出任何数字的项目上)
- 模拟ulltoa(),基数/底数为36