Случайное четырехбайтное число - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Случайное четырехбайтное число»

textual
Листинг программы
  1. key[i] = (rand() % UINT_MAX)<<16 + rand() % UINT_MAX;

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. i - это переменная, которая представляет собой индекс для массива key.
  2. key - это массив, в который будут сохраняться случайные четырехбайтные числа.
  3. rand() - это функция, которая генерирует случайное число.
  4. UINT_MAX - это максимальное значение для 32-битного беззнакового целого числа.
  5. (rand() % UINT_MAX)<<16 - это выражение, которое генерирует случайное число в диапазоне от 0 до UINT_MAX, а затем сдвигает его влево на 16 бит.
  6. rand() % UINT_MAX - это выражение, которое генерирует случайное число в диапазоне от 0 до UINT_MAX.
  7. key[i] = (rand() % UINT_MAX)<<16 + rand() % UINT_MAX; - это строка кода, которая присваивает значение массиву key на основе двух случайных чисел. Первое число сдвигается влево на 16 бит, а затем оба числа складываются.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы