Как я могу генерировать случайное шестнадцатеричное число с длиной моего выбора с помощью C#?Произвольно генерируемое шестнадцатеричное число в C#
ответ
static Random random = new Random();
public static string GetRandomHexNumber(int digits)
{
byte[] buffer = new byte[digits/2];
random.NextBytes(buffer);
string result = String.Concat(buffer.Select(x => x.ToString("X2")).ToArray());
if (digits % 2 == 0)
return result;
return result + random.Next(16).ToString("X");
}
Random random = new Random();
int num = random.Next();
string hexString = num.ToString("X");
random.Next() принимает аргументы, которые позволяют указать мин и максимальное значение, так это то, как вы могли бы контролировать длину.
Зависит от того, насколько вы производите его, но вот 3 альтернативы: 1) Обычно я использую Guid.NewGuid и выбираю часть его (от того, как большое число я хочу).
2) System.Random (см. Другие ответы) является хорошим, если вы просто хотите «случайным образом».
3) System.Security.Cryptography.RNGCryptoServiceProvider
. Нарезка GUID выглядит как Настоящая плохая идея для меня. Они уникальны только в целом. Многие бит GUID, конечно, не квалифицируются как случайные. – spender
@spender является правильным, например, многие GUID содержат MAC-адрес компьютера, генерирующего их. –
Э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-эй, поскольку они считались потенциальной проблемой безопасности. GUID теперь генерируются генератором случайных чисел (122 бит случайных, 6 бит неслучайных). В любом случае, используя 32 (или более) бит среза гида, вы получаете более случайное число, чем System.Random. То есть - если вы не вызываете UuidCreateSequential, который был добавлен для обратной совместимости, если кто-то хочет, чтобы старые стильные указатели, но это совсем другая история. – KristoferA
Вот тот, который будет возвращать 256-битную шестнадцатеричную строку (8х8 = 256):
private static string RandomHexString()
{
// 64 character precision or 256-bits
Random rdm = new Random();
string hexValue = string.Empty;
int num;
for (int i = 0; i < 8; i++)
{
num = rdm.Next(0, int.MaxValue);
hexValue += num.ToString("X8");
}
return hexValue;
}
Это будет работать только если 'длина <= Как 'int.MaxValue' вписывается в 8 шестнадцатеричных цифр. –
Если он действительно хочет, чтобы шестнадцатеричная строка имела длину по своему выбору, вам понадобится код, который вычисляет минимальное число с шестнадцатеричной длиной «x» и максимальной длиной «x». – colithium
Да. Я оставил это специально, но вам просто нужно было сделать конверсию на 0xF? («scuse мое регулярное выражение»), чтобы найти любое целое число, соответствующее вашей желаемой длине. – womp