C++ 用于C+中任意长度字符串的strtoull+;

C++ 用于C+中任意长度字符串的strtoull+;,c++,string,type-conversion,C++,String,Type Conversion,我有一个程序,它接受一个字符串,该字符串表示长度最多256位的数字,我需要扩展到512位。该字符串表示十六进制的数字 它的工作方式是,我有将字符串转换为64位、128位或256位数字的函数,其中128位函数调用64位函数两次,256位函数调用128位函数两次,64位函数使用strotul或手动转换字符串 大于64位的值存储在64位条目的数组中 这很难看,很难理解,而且容易出错,我想把它全部扔掉。考虑到strtoull已经可以很好地处理64位的值,我想知道是否有一些标准库可以接受任意长度的字符串并

我有一个程序,它接受一个字符串,该字符串表示长度最多256位的数字,我需要扩展到512位。该字符串表示十六进制的数字

它的工作方式是,我有将字符串转换为64位、128位或256位数字的函数,其中128位函数调用64位函数两次,256位函数调用128位函数两次,64位函数使用
strotul
或手动转换字符串

大于64位的值存储在64位条目的数组中

这很难看,很难理解,而且容易出错,我想把它全部扔掉。考虑到strtoull已经可以很好地处理64位的值,我想知道是否有一些标准库可以接受任意长度的字符串并将其转换为数字数组

这似乎是一个非常基本的字符串解析操作,我不愿意重新发明轮子


注意:


由于许可问题(我在一家大公司工作,远离采购或法律决策),我只需要使用标准库(GNU、Boost、STL等),否则访问解决方案将花费我太长时间。

有许多库可用于处理大量数据。第一个出现在谷歌上的是。这是LGPL,所以不应该有任何许可问题

mpz_t i;
mpz_init_set_str (i, "0123456789abcdef0123456789abcdef...", 16);

我不明白,字符串是以二进制、八进制还是十六进制的形式表示数字?否则,两次调用64位函数如何生成128位的值?@K-ballo:很好。数字是十六进制的。我更新了这个问题。这看起来并不“难看”,特别是因为它可以工作。GNU不是一个库。它是一个操作系统(GNU(i/i/uɡnuː/)[1]是由GNU项目开发的类似Unix的计算机操作系统)。你的意思可能是格里伯。您已经在使用OpenSSL了吗?(我这样问是因为128-256位数字通常用于密码学)@Mat:它运行了五年,当时有人做了一些合法但出乎意料的事情,整个事情都碎了。调试它花了我一整天的时间。只有在你不打破任何假设的情况下,它才会起作用。现在我必须扩展它,我想把它做好。