有个用JAVA加密的字符串,我用C++将那个JAVA加密类翻译成C++的类来解,可是每次都解不开,后来我发现问题处在随机数那部分
JAVA代码如下:
random = new Random(5);
        for (int i = 0; i < keystring.length(); i++)
            random.setSeed( (long) (random.nextDouble() * 1000 *
                                    (int) keystring.charAt(i)));C++我是这么写的
srand(5);
for (int i = 0; i < keystring.GetLength(); i++)
{
srand( (long) ((rand())/(double) RAND_MAX * 1000 *
(int) keystring.GetAt(i)));
}以上是随机数的初始化部分,在使用时
java的
double x = random.nextDouble();
和我C++的double x = (rand())/(double) RAND_MAX;
出来的结果差别特大,我不知道是我程序问题还是这两种语言对此就是不能一样??

解决方案 »

  1.   

    java 中 java.lang.Math.random() 返回 double 类型 0 ~ 1。
    C++ 中 rand() 返回 int 类型 0 到 RAND_MAX。搂主的理解好像是对的。仔细一看,好像是小括号括得有误。
      

  2.   

    确实会相差大些,可以这样试试java: double x = random.nextDouble() * 1000 * (int) keystring.charAt(i)
    C++:  double x = (rand() % 1000) * (int) keystring.charAt(i)
      

  3.   

    晕,C++ 中 % 还必须是 int 的.
      

  4.   

    double x = (int)(1000*rand()/(RAND_MAX+1.0)) 产生 0 ~ 1000 的随机数java: double x = random.nextDouble() * 1000  产生 0 ~ 1000 的随机数
      

  5.   

    初始化种子数都是5double x = (int)(1000*rand()/(RAND_MAX+1.0)) 产生 0 ~ 1000 的随机数java: double x = random.nextDouble() * 1000  产生 0 ~ 1000 的随机数产生的结果都不一样,没法用