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;
}
相关阅读