2011-09-17 3 views
2

je lis des nombres aléatoires de haute qualité 16 bits de type uint16_t de/dev/random et je reçois un nombre aussi grand que: 2936814755. Est-ce correctlecture de "/ dev/random" dans c

int myFile = open("/dev/random", O_RDONLY);    
unsigned int rand;    
uint16_t randomNum = read(myFile, &rand, sizeof(rand)) ; 
printf(" %u ", rand); 
close(myFile); 

Répondre

9

non signé int n'est probablement pas 16 bits sur votre architecture pc. Si vous voulez être sûr, utilisez plutôt uint16_t.

uint16_t rand;    
int ret = read(myFile, &rand, sizeof(rand)) ; 

Je pense que vous confondez la valeur de retour de la lecture (ret qui devrait être int et est le nombre d'octets lus) et le nombre aléatoire généré (rand qui devrait être uint16_t et le nombre aléatoire généré).

+0

Il imprime rand au lieu d'imprimer randomNum. Est-ce vraiment important qu'il utilise rand dans la lecture? – blueberryfields

+0

Je ne comprends pas votre objection. – Heisenbug

+0

randomNum is uint16_t - Je ne me souviens pas des règles exactes pour C. Ne pas attribuer à une précision inférieure rejeter les bits supplémentaires, et aboutir à un rand de 16 bits? Ou est-il promu? Il semble qu'il imprime la mauvaise variable. – blueberryfields

0

Remplacez 'unsigned int rand' par 'unsigned short rand' dans votre code et tout ira bien!