Преамбула
Можно сказать, учебная задача. Итак, дан массив типа byte[], необходимо заполнить его случайными числами. И случайные числа нужны понадежнее. Ну хорошо, аппаратный ГСЧ конструировать не будем :) Хотя как-нибудь надо и этот вариант рассмотреть.
Решение
Все решается довольно стандартными методами:
1. Подключаем пространство имен System.Security.Cryptography:
using System.Security.Cryptography;
2. Создаем массив байт нужной длины:
byte[] Arr = new byte[666];
3. Создаем RNGCryptoServiceProvider, т.е. генератор случайных чисел системного криптопровайдера.
RngCsp = new RNGCryptoServiceProvider();
4. Заполняем массив:
RngCsp.GetBytes(Arr);
Примечание: Это довольно простое решение "в лоб", и хоть Майкрософт гарантирует нам, что числа будут прям случайные-случайные, в самом MSDN показан пример с выкрутасами (см. в источниках).
Примечание #2: Метод стандартный для C#, но довольно медленный. Даже медленнее, чем заполнение гигантского массива на 500 Мб одним числом, в примерном приближении и довольно неточно заполнение массива заняло почти 6 секунд:
Random bytes (RNGCryptoServiceProvider): 00:00:05.8453343
Источник
RNGCryptoServiceProvider Class Это репост с сайта
http://tolik-punkoff.comОригинал:
http://tolik-punkoff.com/2021/01/10/c-zapolnenie-massiva-sluchajnymi-chislami/(
Comments |
Comment on this)