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

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

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

Добрый день. Написал функцию, которая должна возвращать ключ - массив из 255 беззнаковых целых чисел. Компилятор 32-битный, sizeof(unsigned) == 4, rand() возвращает тоже четырехбайтное число. Но проблема в том, что при записи чисел в файл в шестнадцатеричном формате видно, что третий и четвертый байт — нулевые. Почему так получается? Вот сама функция:
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);
И на выходе получается такое (скринить все не вижу смысла, такая картина везде, хоть и файл на честных 1020 байт):

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

textual
Листинг программы
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
Похожие ответы