现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

如何生成一个32位的随机数

2013-12-30 21:28 工业·编程 ⁄ 共 1111字 ⁄ 字号 暂无评论

CStringA CreateHex(int max) 

    CStringA precision; 
    precision.Format("%x",max); 
    int size = precision.GetLength(); 
 
 
    int num_align = size%4;         // 按多少位对齐 
    if(num_align <=4) 
        num_align = 4; 
    else if (num_align <=8)          // 这里我假设最大数32位,如果你的max数够大,还需要考虑更大的对齐 
        num_align = 8;              // 32位最大数换算10进制是4294967295,16进制是FFFFFFFF(8位对齐) 
 
 
    int num_for = 32/num_align;     // 循环生成 
    CStringA out_put; 
 
 
    srand(GetTickCount());          // 设置种子,保证每次都生成不一样的随机数 
 
 
    for (int i=0;i<num_for;i++) 
    { 
        int num = rand()%max;           // 0~max的随机数(不包括max本身) 
        out_put.AppendFormat("%0*x",num_align,num); // 不够对齐位数的添加0对齐 
        Sleep(2);                   // 保证随机数不重复 
    } 
 
 
    return out_put; 

测试:
int _tmain(int argc, _TCHAR* argv[]) 

 
    int fmax = 800; 
 
    typedef set<CStringA> SetArray; 
    SetArray ArrayHex; 
    for (int i =0;i<1000;i++) 
    { 
        CStringA _hex = CreateHex(fmax).GetBuffer(); 
        printf("%s\n",_hex); 
        if (ArrayHex.find(_hex) != ArrayHex.end()) 
            assert(0);                              // 循环1000次若有重复,则断言 
        ArrayHex.insert(_hex); 
    } 
 
    return TRUE; 

相关阅读

----C/C++怎样生成确定范围的随机数(如[-1,1])

给我留言

留言无头像?