2008-11-23 7 views
20

क्या सी # में sprintf() के समान कुछ है?सी # में sprintf?

उदाहरण के लिए मैं एक पूर्णांक को 2-बाइट बाइट-सरणी में परिवर्तित करना चाहता हूं।

कुछ की तरह:

int number = 17; 
byte[] s = sprintf("%2c", number); 
+0

मैंने अपना जवाब फिर से संपादित किया है (बाइट [] बनाम स्ट्रिंग) –

+0

कृपया स्पष्टीकरण दें कि क्या आप एक बाइट सरणी के रूप में int चाहते हैं या यदि आप int को स्ट्रिंग में परिवर्तित करना चाहते हैं और फिर बाइट सरणी – Yona

उत्तर

3

यह पता चला, कि क्या मैं वास्तव में चाहता था इस:

short number = 17; 
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); 
writer.Write(number); 
writer.Flush(); 

यहाँ कुंजी BinaryWriter वर्ग के राइट-कार्य है। इसमें 18 ओवरलोड हैं, जो विभिन्न प्रारूपों को एक बाइट सरणी में परिवर्तित करते हैं जो इसे स्ट्रीम में लिखता है। मेरे मामले में मुझे यह सुनिश्चित करना होगा कि जिस नंबर को मैं लिखना चाहता हूं उसे एक छोटी डेटाटाइप में रखा गया है, इससे लिखित फ़ंक्शन 2 बाइट लिखेंगे।

+0

पर उपयोग कर रहे हैं एक धारा तब आपका समाधान बहुत अच्छी तरह से काम करता है, लेकिन सरल रूपांतरण के लिए आप बिटकॉन्टर क्लास का उपयोग कर सकते हैं (मेरा जवाब जांचें।) – Yona

+0

हाँ, मैं सहमत हूं। मैं उस पर भी ठोकर खाई .. –

27
string s = string.Format("{0:00}", number) 

पहले 0 का अर्थ है "पहला तर्क" (यानी नंबर); कॉलन के बाद 00 प्रारूप विनिर्देशक (2 संख्यात्मक अंक) है।

हालांकि, ध्यान दें कि नेट तार, UTF-16 के हैं, इसलिए एक 2-चरित्र स्ट्रिंग 4 बाइट, नहीं 2

(संपादित करें: प्रश्न byte[] को string से बदल) है

बाइट्स प्राप्त करने के लिए , Encoding का उपयोग करें:

byte[] raw = Encoding.UTF8.GetBytes(s); 

(स्पष्ट रूप से अलग एन्कोडिंग अलग परिणाम दे सकता है; UTF8 इस डेटा के लिए 2 बाइट्स दे देंगे)

दरअसल, पहली बिट के संक्षिप्त संस्करण है:

string s = number.ToString("00"); 

लेकिन string.Format संस्करण अधिक लचीला है।

4

संपादित करें: मुझे लगता है कि आप एक बाइट सरणी और नहीं एक बाइट सरणी के लिए सबसे पहले और उसके बाद एक स्ट्रिंग के लिए परिवर्तित मूल्य के लिए एक पूर्णांक के मूल्य में परिवर्तित करना चाहते संभालने कर रहा हूँ (उत्तरार्द्ध के लिए मार्क के जवाब की जाँच करें।)

एक बाइट सरणी के लिए एक पूर्णांक परिवर्तित करने के लिए आप का उपयोग कर सकते हैं: (। के बाद से एक पूर्णांक 32 बिट है)

byte[] array = BitConverter.GetBytes(17); 

लेकिन है कि आप 4 बाइट की एक सरणी और 2 नहीं दे देंगे 2 की एक सरणी प्राप्त करने के लिए बाइट्स का उपयोग करना चाहिए:

byte[] array = BitConverter.GetBytes((short)17); 

तुम सिर्फ मूल्य में परिवर्तित करना चाहते हैं 17 दो अक्षरों तो का उपयोग करें:

string result = string.Format("{0:00}", 17); 

लेकिन जैसे मार्क ने बताया परिणाम 4 बाइट की खपत होगी के बाद से .NET में हर किरदार 2 बाइट्स (UTF-16) है (स्ट्रिंग लम्बाई वाले दो बाइट्स सहित यह 6 बाइट्स होगा)।

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