要在一个字节数组中,随机抽取 16 字节,要求多轮抽取得到的结果一样

jmcooler 2015-05-20 09:42:02
有一个字节数组,其中有 100 多字节。每次随机抽取 16 字节,但要求:

第一轮抽取,第二轮抽取,第 N 轮抽取,得到的 16 字节均是一样的值
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-05-21
  • 打赏
  • 举报
回复
引用 5 楼 jmcooler 的回复:
擦,自己找到办法了,就是 srand() 和 rand()
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
/***
*rand.c - random number generator
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines rand(), srand() - random number generator
*
*******************************************************************************/

#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>

/***
*void srand(seed) - seed the random number generator
*
*Purpose:
*       Seeds the random number generator with the int given.  Adapted from the
*       BASIC random number generator.
*
*Entry:
*       unsigned seed - seed to seed rand # generator with
*
*Exit:
*       None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
        unsigned int seed
        )
{
        _getptd()->_holdrand = (unsigned long)seed;
}


/***
*int rand() - returns a random number
*
*Purpose:
*       returns a pseudo-random number 0 through 32767.
*
*Entry:
*       None.
*
*Exit:
*       Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
        void
        )
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
}
jmcooler 2015-05-20
  • 打赏
  • 举报
回复
擦,自己找到办法了,就是 srand() 和 rand()
youjun610789338 2015-05-20
  • 打赏
  • 举报
回复
没明白你的需求: 第一轮抽取,第二轮抽取,第 N 轮抽取,得到的 16 字节均是一样的值 意思是你这个数组里面本来就有很多重复的值,还是咋的???
jmcooler 2015-05-20
  • 打赏
  • 举报
回复
我的基本思路是,根据一个素数种子,类似于下列 hash 算法一样:
uint seed = 31;
			/* 31 131 1313 13131 131313 etc.. */
			uint hash = 0;
			int  len  = src.Length;
			for( int i = 0; i < len; i++ )
				hash = (hash * seed) + src[i];
			return (int)hash;
但这个比较是对一个数组求 hash 值的算法。但我的这个算法,应该和这个的原理上相仿。 我试着对已经抽取到的 n 字节求 hash,以决定下一个要抽取的值,则 result[ n + 1] = src[hash % src.length] 结果有非常多的重复。 基本思路上,只要种子不变,抽取结果不变。但要求随机挑选,则不知道怎么搞
goodluck028 2015-05-20
  • 打赏
  • 举报
回复
只可能,全部付一样的值
jmcooler 2015-05-20
  • 打赏
  • 举报
回复
加上一条,一次抽取的 16 字节,尽可能随机,当然还是允许少量的重复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧