Generate a random byte stream
Here's a general function for producing random integer values in a given range:
#include <stdlib>
/**
* Assumes srand has already been called
*/
int randInRange( int min, int max )
{
double scale = 1.0 / (RAND_MAX + 1);
double range = max - min + 1;
return min + (int) ( rand() * scale * range );
}
Leveraging this to create unsigned char
values:
u_char randomByte()
{
return (u_char) randInRange( 0, 255 );
}
So,
for ( i = 0; i < numBytes; i++ )
stream[i] = randomByte();
For each byte, you can call a random number generator function. The C standard provides the function rand
. Before using it, you should initialize the random sequence with a call to srand
.
gen_rdm_bytestream
may then look something like that:
#include <stdlib.h>
#include <time.h>
unsigned char *gen_rdm_bytestream (size_t num_bytes)
{
unsigned char *stream = malloc (num_bytes);
size_t i;
for (i = 0; i < num_bytes; i++)
{
stream[i] = rand ();
}
return stream;
}
srand ((unsigned int) time (NULL));
Since stream
is unsigned, if the value returned by rand
is greater than UCHAR_MAX
, she will be reduced (modulo UCHAR_MAX
). Therefore you will get pseudo-random numbers between 0 and 255.
On UNIX, there is the getrandom system call.
#include <sys/random.h>
#include <stdlib.h>
unsigned char * gen_rdm_bytestream(size_t const num_bytes) {
unsigned char * const stream = malloc(num_bytes);
getrandom(stream, num_bytes, 0);
return stream;
}
Yes, you have int rand (void);
function in C,
Returns a pseudo-random integral number in the range between 0 and RAND_MAX. RAND_MAX is a constant defined in <cstdlib>.
This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using function srand().
EDIT:
As you are commenting, I have written a code for you that may help you to demonstrate, How to use rand(), the program and its output are:
#include <stdio.h>
#include <stdlib.h> /* srand, rand */
#include <time.h>
int main (){
int i=0;
srand (time(NULL));
printf("Five rand numbers: \n");
for(i = 1; i <= 5; i++){
printf("\n %d", rand());
}
printf("Five rand numbersb between 2 to 5: \n");
for(i = 1; i <= 5; i++){
printf("\n %d", (2 + rand()%4));
}
return 1;
}
Output:
Five rand numbers:
1482376850
1746468296
1429725746
595545676
1544987577
Five rand numbers, between 2 to 5:
2
5
3
4
3
Codepad Link