C++ c+中的十六进制到十六进制+;

C++ c+中的十六进制到十六进制+;,c++,math,numbers,hex,C++,Math,Numbers,Hex,我正在尝试将基数16转换为基数36。我正在使用md5哈希,并使它们都具有0-9a-z 我到处找,没有找到什么好东西。在C++中转换十六进制到六进制的任何建议?你们知道做这件事的好库吗?基本解决方案是将128位数字转换成一个(大)整数,然后执行模运算和36除运算 但是,如果您不介意浪费一些位,为什么不转换为基数32以使事情更简单呢?然后你可以用移位和掩蔽来做任何事情。我想你正在努力解决的棘手问题是转换到Rad36,而不是从一个表示为字符串的十六进制数中获取整数值。因此,这里有一个函数,它接受一个无

我正在尝试将基数16转换为基数36。我正在使用md5哈希,并使它们都具有0-9a-z


我到处找,没有找到什么好东西。在C++中转换十六进制到六进制的任何建议?你们知道做这件事的好库吗?

基本解决方案是将128位数字转换成一个(大)整数,然后执行模运算和36除运算


但是,如果您不介意浪费一些位,为什么不转换为基数32以使事情更简单呢?然后你可以用移位和掩蔽来做任何事情。

我想你正在努力解决的棘手问题是转换到Rad36,而不是从一个表示为字符串的十六进制数中获取整数值。因此,这里有一个函数,它接受一个
无符号的\uuu int64
,将其转换为,并返回一个带转换值的字符串

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(无符号\uuu int64 v)
{
字符串检索;
而(v>0)
{
无符号m=v%36;

如果(M)我不明白这个问题:我如何将C++ 098F6BCD4621D33CADE4E832627 B4F6从C++ 16转换为BASIC 36?我将在以后发布C++代码,它可以实现你想要的,但是同时,这个帖子是相关的:任何基本的计算器()在Android Play Market中可以做到这一点。它可以用于在base 16和base 36之间进行转换。它是免费的。另一个简单的想法是使用base64;它有几个优点:它的应用范围很广(有很多工具可以转换成base64),易于识别,并且您可以轻松执行转换。base-64也非常流行(使用数字、大写和小写字母以及一些标点符号,如下划线和连字符),并且有很多函数可以进行转换。@John,你能解释一下吗?我觉得Base64的一个主要优点是它实际上可以以可打印的ASCII格式表示二进制数据。@Abe:没错,Base64只使用低ASCII可打印字符。我将删除我以前的注释。你可能需要使其返回余数,以便链接对
rad36
的调用。@Alexandre C:可能是个好主意。我的应用程序中不需要这个,所以我将把它作为练习留给读者。:)谢谢。我收到一个错误“error:expected”,“or…”在“v”之前在第一行。要使用_int64,我需要包括什么吗?@Tech:您使用的是哪种编译器?@Tech:我对GCC的经验有限,但我发现这可能对您有用: