Случайное четырехбайтное число - C (СИ)
Формулировка задачи:
Добрый день. Написал функцию, которая должна возвращать ключ - массив из 255 беззнаковых целых чисел. Компилятор 32-битный, sizeof(unsigned) == 4, rand() возвращает тоже четырехбайтное число. Но проблема в том, что при записи чисел в файл в шестнадцатеричном формате видно, что третий и четвертый байт — нулевые. Почему так получается? Вот сама функция:
В файл все это пишется так:
И на выходе получается такое (скринить все не вижу смысла, такая картина везде, хоть и файл на честных 1020 байт):
unsigned *keygen() { unsigned *key = (unsigned *)malloc(sizeof(unsigned) * 255); size_t i; for (i = 0; i < 255; i++) //key[i] = (rand() % UINT_MAX) | ((rand() % UINT_MAX) >> 16); вот так почему-то тоже не работает key[i] = rand() % UINT_MAX; return key; }
unsigned *gen_key = keygen(); FILE *keyfile = fopen("KEY.K", "wb"); fwrite(gen_key, sizeof(unsigned), 255, keyfile); fclose(keyfile);
Решение задачи: «Случайное четырехбайтное число»
textual
Листинг программы
key[i] = (rand() % UINT_MAX)<<16 + rand() % UINT_MAX;
Объяснение кода листинга программы
В данном коде происходит следующее:
i
- это переменная, которая представляет собой индекс для массиваkey
.key
- это массив, в который будут сохраняться случайные четырехбайтные числа.rand()
- это функция, которая генерирует случайное число.UINT_MAX
- это максимальное значение для 32-битного беззнакового целого числа.(rand() % UINT_MAX)<<16
- это выражение, которое генерирует случайное число в диапазоне от 0 доUINT_MAX
, а затем сдвигает его влево на 16 бит.rand() % UINT_MAX
- это выражение, которое генерирует случайное число в диапазоне от 0 доUINT_MAX
.key[i] = (rand() % UINT_MAX)<<16 + rand() % UINT_MAX;
- это строка кода, которая присваивает значение массивуkey
на основе двух случайных чисел. Первое число сдвигается влево на 16 бит, а затем оба числа складываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д