...并将数字作为字符串返回。
我该怎么做?那有没有图书馆?
答案 0 :(得分:5)
您可以使用std::istringstring
中的<sstream>
将字符串转换为整数。然后,您可以使用rand
或random
获取一个随机数,您可以使用模运算将其约束到间隔,然后您可以使用std::ostringstream
将数字转换为十六进制字符串。
#include <sstream> #include <string> #include <cstdlib> int hexstr2int(const std::string& str) { int result; std::istringstream iss(str); iss >> result; return result; } std::string int2hexstr(int number) { std::ostringstream oss; oss << std::hex << number; return number.str(); } int randint(int lower, int upper) { int range = upper - lower; return ((rand()%range)+lower); } std::string randhexstr(const std::string& a, const std::string& b) { int lower = hexstr2int(a); int upper = hexstr2int(b); return int2hexstr(randint(lower,upper)); }
答案 1 :(得分:1)
boost :: lexical_cast非常有用,方便在字符串和数字之间进行转换。它允许您编写如下表达式:
int some_number = boost::lexical_cast<int>(some_string);
或其他方式:
std::string some_string = boost::lexical_cast<std::string>(some_int);
答案 2 :(得分:0)
我的回复不会像其他人一样有用,但这确实是一个基本的编程问题。
学习编程在某种程度上是学习如何将问题分解为子问题,直到小问题易于管理。
您想要将两个十六进制数字之间的数字随机化,表示为字符串。
这里的出发点是你需要一个随机数。找出如何获得随机数不应该那么复杂。
现在,您所拥有的随机数函数可能不接受范围。
比如说它产生0到1之间的浮点数,你想要a和b之间的数字。不难发现你可以将数字n从0 - 1转换为数字m,从a - b:m = n*(b-a)+a
有时你会有一个随机函数,它给出一个介于0和给定参数之间的整数;有时它会有所不同 - 应用相同的推理。
然后你需要找到你的范围的a和b值,但你有代表十六进制数字的字符串。那么你显然必须找到一种方法将它们转换为十进制数。找到一个能为你做到这一点的功能应该不难。如果不这样做,解析十六进制字符串就不那么难了。
瞧瞧。通过将问题分解为子问题,您可以找到解决问题的方法。