69,371
社区成员
发帖
与我相关
我的任务
分享
// 随机化数组里面的值
void RandomTheAray(int *pPointer, int number)
{
//register int i;
register int *pTmp;
srand((unsigned)time(NULL));
for (pTmp = pPointer; pTmp < &pPointer[number]; pTmp++)
{
swap(pTmp, &pPointer[rand()%number]);
}
/*
for (i = 0; i < number; i++)
{
swap(&pPointer[i], &pPointer[rand()%number]);
}
*/
}
class DLLEXPORT CRandom
{
public:
CRandom();
~CRandom();
void* GenerateRandomBlock(void *rblock,UINT bytelen);
BYTE GenerateRandomByte(BYTE &rbyte);
WORD GenerateRandomWord(WORD &rword);
DWORD GenerateRandomDWord(DWORD &rdword);
QWORD GenerateRandomQWord(QWORD &rqword);
private:
HCRYPTPROV hCryptProv;
};
#include <stdio.h>
#include "Rand.h"
CRandom::CRandom()
{
if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0))
puts("CryptAcquireContext Failed!");
}
CRandom::~CRandom()
{
if(hCryptProv)
if(!CryptReleaseContext(hCryptProv, 0))
puts("CryptReleaseContext Failed!");
}
void* CRandom::GenerateRandomBlock(void *rblock,UINT bytelen)
{
if(hCryptProv)
if(!CryptGenRandom( hCryptProv, bytelen, (BYTE*)rblock))
return NULL;
return rblock;
}
BYTE CRandom::GenerateRandomByte(BYTE &rbyte)
{
if(hCryptProv)
if(!CryptGenRandom( hCryptProv, sizeof(BYTE), &rbyte))
return 0;
return rbyte;
}
WORD CRandom::GenerateRandomWord(WORD &rword)
{
if(hCryptProv)
if(!CryptGenRandom( hCryptProv, sizeof(WORD), (BYTE*)&rword))
return 0;
return rword;
}
DWORD CRandom::GenerateRandomDWord(DWORD &rdword)
{
if(hCryptProv)
if(!CryptGenRandom( hCryptProv, sizeof(DWORD), (BYTE*)&rdword))
return 0;
return rdword;
}
QWORD CRandom::GenerateRandomQWord(QWORD &rqword)
{
if(hCryptProv)
if(!CryptGenRandom( hCryptProv, sizeof(QWORD), (BYTE*)&rqword))
return 0;
return rqword;
}
// srand((unsigned)time(NULL));必须在函数外面先调用。
unsigned GenerateI64Random(int nDigits)
{
unsigned nI64Value = 0;
int i;
/*
if (nDigits > MAX)
{
printf("nDigits too big\n");
return 0;
}
*/
for (i = 0; i < nDigits; i++)
{
nI64Value = nI64Value * 10 + (unsigned)(rand()%10);
}
return nI64Value;
}