2010-10-12 8 views
7

मैं सी # में एक int से दो बाइट्स कैसे परिवर्तित करूं?मैं सी # में एक int से दो बाइट्स कैसे परिवर्तित करूं?

+0

int का कौन सा हिस्सा? दो बाइट्स पूरे 32-बिट पूर्णांक मान को एन्कोड करने के लिए पर्याप्त नहीं हैं। – dtb

+1

'int' को स्टोरेज के लिए 4 बाइट की आवश्यकता है। क्या आप एमएसबी में जानकारी खोना चाहते हैं? –

+0

* बीप * किसने इसे घटा दिया। यह एक उपयोगी और रोचक सवाल है क्योंकि सी रास्ता अचानक सी # में कोई अच्छा कारण नहीं है और स्पष्ट एपीआई मौजूद नहीं हैं (बिटकॉन्टर धीमा और * टूटा * कई तरीकों से) है। – Joshua

उत्तर

11

मान लिया जाये कि तुम सिर्फ कम बाइट्स हैं:

byte b0 = (byte)i, 
    b1 = (byte)(i>>8); 

हालांकि, 'int' के बाद से 'Int32' है कि 2 अधिक बाइट्स uncaptured छोड़ देता है।

+0

यह मेरा समाधान है। बिटकॉन्टर से बहुत तेज होना चाहिए। – Joshua

+5

@ जोशुआ, मैंने एक त्वरित बेंच-मार्क (रिलीज बिल्ड, 50000000 पुनरावृत्तियों, स्टॉपवॉच और पूर्ण परीक्षण को विभिन्न कलाकृतियों को हटाने के लिए दो बार दोहराया) और एक सरणी बनाने और बिट-मास्किंग बनाम बिटकॉन्टर का उपयोग करने के बीच अंतर लगभग 1ns प्रति है मेरी मशीन पर कॉल करें। यदि आप सरणी निर्माण को हटाते हैं (केवल दो बाइट प्राप्त करें), अंतर लगभग 14ns है। –

+0

मुझे आपके मानक पर शक नहीं है। तुलना में बिटकॉन्टर धीमा है क्योंकि इसे सरणी आवंटित करना है। यदि मैं हजारों पूर्णांक के लिए अपने सरणी आकार को पूर्व-पहचान सकता हूं तो मैं समय की एक अनौपचारिक राशि बचा सकता हूं। – Joshua

4

आप इंट 32 युक्त बाइट प्राप्त करने के लिए BitConverter.GetBytes का उपयोग कर सकते हैं। वहाँ, 2.

2

यह करने के लिए एक और तरीका है परिणाम में 4 बाइट हो जाएगा, हालांकि, नहीं, हालांकि अन्य तरीकों के रूप में के रूप में चालाक नहीं:

Int32 i = 38633; 
byte b0 = (byte)(i % 256); 
byte b1 = (byte)(i/256); 
2

यह एक int16 है?

Int16 i = 7; 
byte[] ba = BitConverter.GetBytes(i); 

इसमें केवल दो बाइट होंगे।

संबंधित मुद्दे