2009-06-28 2 views

ответ

36
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"); 
} 
13
Random random = new Random(); 
    int num = random.Next(); 
    string hexString = num.ToString("X"); 

random.Next() принимает аргументы, которые позволяют указать мин и максимальное значение, так это то, как вы могли бы контролировать длину.

+1

Это будет работать только если 'длина <= Как 'int.MaxValue' вписывается в 8 шестнадцатеричных цифр. –

+0

Если он действительно хочет, чтобы шестнадцатеричная строка имела длину по своему выбору, вам понадобится код, который вычисляет минимальное число с шестнадцатеричной длиной «x» и максимальной длиной «x». – colithium

+0

Да. Я оставил это специально, но вам просто нужно было сделать конверсию на 0xF? («scuse мое регулярное выражение»), чтобы найти любое целое число, соответствующее вашей желаемой длине. – womp

4

Зависит от того, насколько вы производите его, но вот 3 альтернативы: 1) Обычно я использую Guid.NewGuid и выбираю часть его (от того, как большое число я хочу).

2) System.Random (см. Другие ответы) является хорошим, если вы просто хотите «случайным образом».

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

. Нарезка GUID выглядит как Настоящая плохая идея для меня. Они уникальны только в целом. Многие бит GUID, конечно, не квалифицируются как случайные. – spender

+1

@spender является правильным, например, многие GUID содержат MAC-адрес компьютера, генерирующего их. –

+0

Э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-эй, поскольку они считались потенциальной проблемой безопасности. GUID теперь генерируются генератором случайных чисел (122 бит случайных, 6 бит неслучайных). В любом случае, используя 32 (или более) бит среза гида, вы получаете более случайное число, чем System.Random. То есть - если вы не вызываете UuidCreateSequential, который был добавлен для обратной совместимости, если кто-то хочет, чтобы старые стильные указатели, но это совсем другая история. – KristoferA

2

Вот тот, который будет возвращать 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; 
}