我需要将两个十六进制数字之间的数字随机化,表示为字符串

时间:2010-03-24 13:25:00

标签: c++

...并将数字作为字符串返回。

我该怎么做?那有没有图书馆?

3 个答案:

答案 0 :(得分:5)

您可以使用std::istringstring中的<sstream>将字符串转换为整数。然后,您可以使用randrandom获取一个随机数,您可以使用模运算将其约束到间隔,然后您可以使用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值,但你有代表十六进制数字的字符串。那么你显然必须找到一种方法将它们转换为十进制数。找到一个能为你做到这一点的功能应该不难。如果不这样做,解析十六进制字符串就不那么难了。

瞧瞧。通过将问题分解为子问题,您可以找到解决问题的方法。