我可以使用该strtol函数将基于 base36 的值(另存为字符串)转换为long int:
long int val = strtol("ABCZX123", 0, 36);
Run Code Online (Sandbox Code Playgroud)
是否有标准函数允许反转它?也就是把一个long intval变量转换成base36字符串,再获取"ABCZX123"?
没有这方面的标准函数。您需要编写自己的一个。
使用示例: https: //godbolt.org/z/MhRcNA
const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char *reverse(char *str)
{
char *end = str;
char *start = str;
if(!str || !*str) return str;
while(*(end + 1)) end++;
while(end > start)
{
int ch = *end;
*end-- = *start;
*start++ = ch;
}
return str;
}
char *tostring(char *buff, long long num, int base)
{
int sign = num < 0;
char *savedbuff = buff;
if(base < 2 || base >= sizeof(digits)) return NULL;
if(buff)
{
do
{
*buff++ = digits[abs(num % base)];
num /= base;
}while(num);
if(sign)
{
*buff++ = '-';
}
*buff = 0;
reverse(savedbuff);
}
return savedbuff;
}
Run Code Online (Sandbox Code Playgroud)