Generieren eine zufällige 32-bit-hexadezimal-Wert in C
Was wäre der beste Weg zu generieren, die eine zufällige 32-bit-hexadezimal-Wert in C? In meiner aktuellen Umsetzung bin ich generieren jedes bit einzeln aber die Ausgabe ist nicht völlig zufällig ... viele Werte werden mehrfach wiederholt. Ist es besser, zu generieren, die die gesamte Zufallszahl anstelle der Erzeugung jedes bit einzeln?
Den Zufallszahlen nutzen sollte, die gesamten 32 bit-Adressraum (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);
}
}
Ihre aktuelle code wird genauso zufällig wie die Erzeugung von einem einzigen 32-bit-Wert mit
Warum nicht einfach rufen Sie einen random number generator? Ich habe vergessen, ob die C ' s rand() liefert eine 64-bit-Menge (oder komplett random 32), aber es gibt andere, die tun. Und was bedeutet "hexadezimal" zu tun haben, mit 32 bit-zahlen?
Kommentar oben geschrieben unter der Annahme, dass RAND_MAX ist max int
rand
. Zufallszahlen haben sich wiederholende Werte.Warum nicht einfach rufen Sie einen random number generator? Ich habe vergessen, ob die C ' s rand() liefert eine 64-bit-Menge (oder komplett random 32), aber es gibt andere, die tun. Und was bedeutet "hexadezimal" zu tun haben, mit 32 bit-zahlen?
Kommentar oben geschrieben unter der Annahme, dass RAND_MAX ist max int
InformationsquelleAutor sachin | 2011-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
rand()
nicht wieder ein full random 32-bit-Ganzzahl. Letztes mal ich überprüft er kehrte zwischen0
und2^15
. (Ich denke, es ist implementierungsabhängig.) So müssen Sie rufen Sie ihn mehrmals und Maske.x = rand()
?Heffernan: ich habe gerade editiert die Antwort.
Gibt es einen Wert im Bereich von 0 bis RAND_MAX
Heffernan: Richtig, die ist nur gewährleistet werden mindestens
32767
.Aber die Umsetzung, die Sie geben, werden nicht mehr zufällig als Sachin ist. Obwohl ich Zustimmen, dass es viel besser ist.
InformationsquelleAutor Mysticial
Können Sie einfach erstellen alle zufällige Zahl, die mindestens 32 bit breit und ein format, das als hex. Beispiele:
Nun
hex
ist ein string, der die acht zufällige hexadezimale Ziffern. Vergessen Sie nicht die Samen, die verschiedene pseudo-Zufallszahlen-Generatoren (mitsrand48()
undsrand()
bzw. für #1 und #2). Da Sie im wesentlichen haben die Samen, die PRNGs aus zufälliger Quelle mit mindestens einer 32-bit-Ganzzahl, könnte man genauso gut Tippen Sie auf die random source direkt (es sei denn, du bist mittime()
oder etwas "nicht-zufällig").InformationsquelleAutor Kerrek SB