2013-02-21 15 views
6

में मैं मेरे कोड में बाइट [] srnoपरिवर्तित पूरे बाइट [] uint

byte[] srno = new byte[6]; 

srno[0] = 0xff; 
srno[1] = 0x0f; 
srno[2] = 0x24; 
srno[3] = 0x12; 
srno[4] = 0x16; 
srno[5] = 0x0a; 

अब मैं

uint a = 0xff0f2412160a; 

यह कैसे कन्वर्ट करने के लिए की तरह uint में यह मान करना चाहते हैं?

+3

एक 'uint' 4 बाइट है, लेकिन आप 6 मिल गया है वहाँ बाइट्स। किसी भी मामले में, क्या आप 'बिटकॉन्टर' कक्षा के बारे में जानते हैं? – Ani

+0

बस गणित करें: 'srno [0] * 0x10000000000 + srn0 [1] * 0x100000000 ...'। जो कुछ भी। –

+0

@Ani: ठीक है कोई समस्या मुझे उलंग के लिए बताओ? बिटकॉन्टरर क्लास को इंडेक्स की आवश्यकता है जो मैं लंबवत इंडेक्स के लिए नहीं चाहता हूं, मैं पूरे सरणी को कन्वर्ट करना चाहता हूं – Kevan

उत्तर

8

जैसा कि @animaonline सुझाव दिया गया है, आपको BitConverter का उपयोग बाइट सरणी को uint या * ulong में परिवर्तित करने के लिए करना चाहिए। इस प्रकार आपके पास 6 बाइट्स हैं, uint आपके लिए बहुत छोटा है। आपको उलोंग * में परिवर्तित करना चाहिए। लेकिन कनवर्टर आठ बाइट्स आवश्यकता है, इसलिए बाइट्स की अपेक्षित संख्या के साथ नई सरणी बनाने के लिए:

byte[] value = new byte[8]; 
Array.Reverse(srno); // otherwise you will have a1612240fff result 
Array.Copy(srno, value, 6); 
ulong result = BitConverter.ToUInt64(value, 0); 
Console.WriteLine("{0:x}", result); // ff0f2412160a 
+1

यह वांछित काम करता है जैसा मैं चाहता था! – Kevan

0

सिस्टम नाम स्थान में आप BitConverter पुस्तकालय वर्ग मिल जाएगा। इस प्रकार आप स्थिर ToUInt64() समारोह चाहते हैं:

var a = BitConvert.ToUInt64(srno, 0); 

आप को [8]

MSDN

+1

आपको पहले सरणी को पीछे हटाना होगा! –

0

हर कोई अपने सरणी के आकार को समायोजित करने की आवश्यकता होगी उसके उम्मीद की बाइट-आदेश एन्कोडिंग अनदेखी किया जा रहा है उत्पादन। BitConverter कक्षा एक निश्चित एन्कोडिंग (आमतौर पर लिटिल-एंडियन, आईआईआरसी) का उपयोग करती है। उदाहरण में आउटपुट को बिग-एंडियन माना जाता है। एक परिपूर्ण दुनिया में आप गणित स्वयं ही करेंगे, लेकिन Array.Reverse का उपयोग करना आसान है, फिर इनबिल्ट BitConverter कक्षा का उपयोग करें।

शायद इससे पहले कि मैं यह इसलिए यहाँ असुरक्षित कोड का एक बहुत जल्दी टुकड़ा है पोस्ट करने के लिए मिलता है उत्तरों की एक ढेर होने जा रहे हैं:

public static unsafe ulong ToULong(byte[] values) 
{ 
    byte* buffer = stackalloc byte[8]; 
    if (BitConverter.IsLittleEndian) 
     Array.Reverse(values); 
    System.Runtime.InteropServices.Marshal.Copy(values, 0, (IntPtr)buffer, values.Length); 
    return *(ulong*)buffer; 
} 
संबंधित मुद्दे