我正在尝试将16进制转换为36进制。我正在将md5哈希值转换为0-9a-z的值。
我搜索了一下,没有找到什么好的方法。有没有关于在C ++中将十六进制转换为三十六进制的建议?你们知道有什么好的库可以完成这个任务吗?
我正在尝试将16进制转换为36进制。我正在将md5哈希值转换为0-9a-z的值。
我搜索了一下,没有找到什么好的方法。有没有关于在C ++中将十六进制转换为三十六进制的建议?你们知道有什么好的库可以完成这个任务吗?
我猜你遇到的难点是将十六进制表示的字符串转换为Rad36,而不是获取一个整数值。因此,这里有一个函数,它接受一个 unsigned __int64
,将其转换为 Radix 36,并返回一个包含转换后值的字符串。
string rad36(unsigned __int64 v)
{
string retval;
while( v > 0 )
{
unsigned m = v%36;
if( m <= 9 )
retval.insert(0,1,'0'+m);
else
retval.insert(0,1,'A'+m-10);
v /= 36;
}
return retval;
}
rad36
。 - Alexandre C.基本解决方案是将你的128位数字转换为一个(较大的)整数,然后依次执行模数和36的除法运算。
但是,如果你可以浪费一些位,为什么不将其转换为32进制以使事情更加简单呢?这样,你就可以使用移位和屏蔽来完成所有操作。