在C语言中生成一个随机的32位十六进制值,最好的方法是什么?在我的当前实现中,我是单独生成每一位二进制数,但输出结果并不完全随机......很多值会重复多次。生成整个随机数是否比单独生成每一位更好?
这个随机数应该利用整个32位地址空间(0x00000000至0xffffffff)。
file = fopen(tracefile,"wb"); // create file
for(numberofAddress = 0; numberofAddress<10000; numberofAddress++){ //create 10000 address
if(numberofAddress!=0)
fprintf(file,"\n"); //start a new line, but not on the first one
fprintf(file, "0 ");
int space;
for(space = 0; space<8; space++){ //remove any 0 from the left
hexa_address = rand() % 16;
if(hexa_address != 0){
fprintf(file,"%x", hexa_address);
space++;
break;
}
else if(hexa_address == 0 && space == 7){ //in condition of 00000000
fprintf(file,"%x", "0");
space++;
}
}
for(space; space<8; space++){ //continue generating the remaining address
hexa_address = rand() % 16;
fprintf(file,"%x", hexa_address);
}
}
rand
生成单个32位值一样随机。但是随机数会有重复的值。 - David Heffernan