Far*_*raz 1 c random random-seed
我正在尝试在C 中实现一组编码和解码隐写功能,其中我使用 rand() 将我的数据随机散布在一个数组中。
我使用 rand 来计算一个随机索引,如下所示:
unsigned int getRandIndex(int size) {
return ((unsigned)(rand() * 8)) % size;
}
Run Code Online (Sandbox Code Playgroud)
我像这样播种 rand:
unsigned long seed = time(NULL);
srand(seed);
Run Code Online (Sandbox Code Playgroud)
我将种子和我的数据一起作为包含校验和和长度的标头的一部分。
我遇到的问题是,在解码时,当我用从数据中解码的种子再次为 rand 函数播种时,rand() 往往会产生最轻微的变化,如下所示:
Index at encode: | Index at decode:
---------------------------------------------------------------------
.
.
.
At: 142568 | At: 142568
At: 155560 | At: 155552
-- --
At: 168184 | At: 168184
.
.
.
Run Code Online (Sandbox Code Playgroud)
弄乱我的解码数据。
这是 rand() 函数的限制吗?我 100% 确定种子正在逐位正确解码,因为我已经验证过。
C 2018 7.22.2.2 2 说:
该
srand
函数使用参数作为一个新的伪随机数序列的种子,该序列将被后续调用返回rand
。如果srand
然后使用相同的种子值调用,则伪随机数序列应重复。
这并没有明确说明在程序的不同执行中顺序是相同的,但我认为这是理解的。但是,它不会扩展到不同的 C 实现,包括那些因链接到不同版本的 C 标准库而产生的实现。
归档时间: |
|
查看次数: |
107 次 |
最近记录: |