| 仔细研究了下种子的问题,确实是重中之重,一顿折腾之后我在VC++6.0里实现如下: BYTE  m;
 WORD  i, crc16;
 DWORD rand_data[4], dwBuf0, dwBuf1, dwBuf2;
 
 SYSTEMTIME sysTime;
 GetLocalTime(&sysTime);
 
 i = sysTime.wYear      +
 sysTime.wMonth     +
 sysTime.wDay       +
 sysTime.wDayOfWeek +
 sysTime.wHour      +
 sysTime.wMinute    +
 sysTime.wSecond    +
 sysTime.wMilliseconds;
 
 dwBuf0   = ~i;
 dwBuf0 <<= 16;
 dwBuf0  += i;
 
 for(m=0; m<4; m++)
 {
 //循环右移5位后的数据作为下一个随机数的种子
 dwBuf1  = dwBuf0 << 27;
 dwBuf1 &= 0xfe000000;
 
 dwBuf2  = dwBuf0 >> 5;
 dwBuf2 &= 0x01ffffff;
 
 dwBuf0  = dwBuf1 + dwBuf2;
 
 dwBuf0  = ~dwBuf0;
 dwBuf0 ^=  0xxxxxxxxx;
 
 srand(dwBuf0);
 rand_data[m] = rand();
 }
 你觉得这个效果如何?
 |