长期读者和潜伏者,第一次张贴。
我希望得到一些关于我一直没有解决的老问题的帮助。我试图弄清楚如何使用 VB6 PRNG 从 Randomize() 函数提供的两字节种子生成字节输出。我正在尝试复制 C 中的代码并用我自己的 2 个字节作为种子,比如 0x12FF。
我希望创建一个 8 字节输出,该输出源自具有特定种子的 PRNG 的 8 个单字节输出(而不是一个 8 字节输出)。输出最好是十六进制的,例如:
0xFF 0x1A 0x2B 0x3C 0x4D 0x5E 0x6F 0x1A
我知道 VB6 PRNG 有一个巨大的缺陷,我的实验旨在证明这个缺陷以及为什么不应该使用这样的 PRNG 来避免重复输出。
我似乎能找到的唯一文档是如何生成整数输出,这对我没有用,除非以某种方式使用整数输出来生成字节输出。我不熟悉输出,如果能得到任何帮助,我将不胜感激。
下面是我的整数输出示例。
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
unsigned long rndVal;
rndVal = 0x50000L; // default VB6 value of 327680, can I set this to a 2 byte value such as 0x12FF?
int i;
float rndFloat;
for (i=0;i<8;i++)
{
rndVal = (rndVal * 0x43fd43fdL + 0xc39ec3L) & 0xffffffL;
rndFloat = (float)rndVal / (float)16777216.0;
printf("Value is %.15f\n",rndFloat);
}
return 0;
}
我可以清楚地看到如何通过修改 rndVal 值来使用我自己的种子,如何将其输出转换为字节输出,就像 VB6 所做的那样,或者这是否需要完全重新思考?
任何帮助将不胜感激!