Случайное четырехбайтное число - 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 бит, а затем оба числа складываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д