2009-06-28 1 views
22

में यादृच्छिक रूप से उत्पन्न हेक्साडेसिमल संख्या सी # का उपयोग करके मेरी पसंद की लंबाई के साथ एक यादृच्छिक हेक्साडेसिमल संख्या कैसे उत्पन्न कर सकता हूं?सी #

उत्तर

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

यह काम तभी करेंगे जब 'लंबाई <= 8' 'int.MaxValue' के रूप में 8 हेक्स अंकों में फिट बैठता है। –

+0

यदि वह वास्तव में हेक्स स्ट्रिंग को अपनी पसंद की लंबाई का होना चाहता है, तो आपको उस कोड की आवश्यकता होगी जो हेक्स लम्बाई 'x' के साथ न्यूनतम संख्या की गणना करे और अधिकतम 'x' के साथ अधिकतम हो। – colithium

+0

हाँ। मैंने इसे उद्देश्य पर छोड़ दिया, लेकिन आपको मूल रूप से 0xF पर रूपांतरण करना होगा? ('मेरी नियमित अभिव्यक्ति का दुरुपयोग करें) जो भी पूर्णांक आपकी वांछित लंबाई से मेल खाता है। – womp

4

इस पर निर्भर करता है कि आप इसे कितना यादृच्छिक चाहते हैं, लेकिन यहां 3 विकल्प हैं: 1) मैं आमतौर पर केवल Guid.NewGuid का उपयोग करता हूं और इसका एक हिस्सा चुनता हूं (डीपी। मुझे कितनी बड़ी संख्या चाहिए)।

2) सिस्टम। यादृच्छिक (अन्य उत्तरों देखें) अच्छा है अगर आप बस 'यादृच्छिक पर्याप्त' चाहते हैं।

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

के बीच उत्पन्न होती है GUID को स्लाइस करना एक जैसा लगता है मेरे लिए असली बुरा विचार। वे पूरी तरह से अद्वितीय रूप से लिया जाता है। एक GUID के कई बिट्स निश्चित रूप से यादृच्छिक के रूप में योग्य नहीं हैं। – spender

+1

@ स्पेंडर सही है, उदाहरण के लिए कई GUID में पीसी उत्पन्न करने वाले पीसी का मैक पता होता है। –

+0

एह, नहीं, मैक-एड्रेस आधारित guids 2000-ish में सेवानिवृत्त हुए थे क्योंकि उन्हें संभावित सुरक्षा समस्या माना गया था। GUID अब यादृच्छिक संख्या जनरेटर द्वारा उत्पन्न होते हैं (122 बिट्स यादृच्छिक, 6 बिट गैर-यादृच्छिक)। किसी भी तरह से, एक guid के 32 (या अधिक) बिट टुकड़ा का उपयोग कर सिस्टम से अधिक यादृच्छिक संख्या देता है। यादृच्छिक। यह है - जब तक कि आप यूयूडक्रेट सिक्योरेंशियल को कॉल न करें जो किसी भी पुराने स्टाइल गाइड के मामले में पिछड़ा संगतता के लिए जोड़ा गया था, लेकिन यह एक अलग कहानी है। – KristoferA

2

यहाँ एक है कि एक 256-बिट हेक्स स्ट्रिंग वापसी होगी है (8x8 = 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; 
}