- मैं एक सर्वर जो अशक्त समाप्त स्ट्रिंग की जरूरत के साथ संवाद स्थापित कर रहा हूँ
- मैं इस चालाकी सी # में कर सकते हैं?
उत्तर
मैं तुम्हें, द्विआधारी प्रोटोकॉल के कुछ प्रकार लागू कर रहे हैं, तो तार अशक्त समाप्त कर दिया जाता मान। क्या आप BinaryWriter
का उपयोग कर रहे हैं? के रूप में लंबाई पहले से जुड़ा हुआ
डिफ़ॉल्ट BinaryWriter
तार लिखता है।
class MyBinaryWriter : BinaryWriter
{
private Encoding _encoding = Encoding.Default;
public override void Write(string value)
{
byte[] buffer = _encoding.GetBytes(value);
Write(buffer);
Write((byte)0);
}
}
तो फिर तुम सिर्फ इस तरह कोई भी स्ट्रिंग लिख सकते हैं::
using (MyBinaryWriter writer = new MyBinaryWriter(myStream))
{
writer.Write("Some string");
}
आप अपनी आवश्यकताओं के आधार पर, _encoding
बिट समायोजित करना पड़ सकता है आप उस व्यवहार को बदल सकते हैं।
आप जाहिर है, अन्य डेटा प्रकार आप स्थानांतरित करने की आवश्यकता हो सकती है के लिए विशिष्ट आवश्यकताओं के साथ वर्ग का विस्तार कर सकते अपने वास्तविक प्रोटोकॉल कार्यान्वयन अच्छा और साफ रखने। आपको शायद अपने स्वयं के (बहुत समान) BinaryReader
की भी आवश्यकता होगी।
आप स्ट्रिंग के अंत करने के लिए एक अशक्त चरित्र जोड़ें। .NET तारों में शून्य वर्ण हो सकते हैं।
इस "\ 0" की तरह? –
मुझे लगता है कि वह 'char c = new char()' का सुझाव दे रहा है, जो यूनिकोड पॉइंट 'यू +0000' बनाएगा। –
तार पहले से ही समाप्त हो चुके हैं। यद्यपि स्ट्रिंग में एक शून्य चरित्र नहीं होता है, लेकिन एक शून्य वर्ण हमेशा स्मृति में स्ट्रिंग का पालन करता है।
हालांकि, .NET में तार यूनिकोड हैं, इसलिए उन्हें स्मृति में यूटीएफ -16/यूसीएस -2 के रूप में संग्रहीत किया जाता है, और सर्वर एक अलग एन्कोडिंग की उम्मीद कर सकता है, आमतौर पर एक 8 बिट एन्कोडिंग। तो फिर तुम एक बाइट सरणी में स्ट्रिंग सांकेतिक शब्दों में बदलना और अंत में एक शून्य बाइट जगह करने के लिए होगा:
byte[] data = Encoding.Default.GetBytes(theString);
byte[] zdata = new byte[data.Length + 1];
data.CopyTo(zdata, 0);
(zdata सरणी सभी शून्यों से भर जाता है, जब पैदा करता है, ताकि आप वास्तव में स्थापित करने के लिए नहीं है शून्य करने के लिए अतिरिक्त बाइट।)
एक मामूली टाइपो फिक्स्ड। मैं व्यक्तिगत रूप से डबल बफर आवंटन से बहुत खुश नहीं हूं। आप इसके आसपास हो सकते हैं। फिर फिर, तार भारी या बहुत अधिक मात्रा होने की संभावना नहीं है। – Thorarin
"शून्य समाप्त" आमतौर पर "पहले शून्य पर समाप्त होता है" का अर्थ है। नेट तार। अशक्त-समाप्त होने के लिए यदि आपने उस एक .NET स्ट्रिंग एक या अधिक रिक्त वर्ण हो सकते हैं और अभी तक समाप्त नहीं –
"तार पहले से ही समाप्त अशक्त की अनुमति देते हैं पर विचार नहीं किया जा सकता है स्वयं स्ट्रिंग एक अशक्त शामिल नहीं है चरित्र, एक शून्य चरित्र हमेशा स्मृति में स्ट्रिंग का पालन करता है। " मैंने पहले कभी यह नहीं सुना है, और एमएसडीएन दस्तावेज़ों पर इसके बारे में कोई जानकारी नहीं देखी है। क्या आप एक स्रोत पोस्ट कर सकते हैं? – Juliet
मुझे लगता है कि स्मार्ट तरीका बस यह करने के लिए है।
string str = "An example string" + Char.MinValue; // Add null terminator.
फिर इसे सर्वर पर भेजने के लिए बाइट्स में परिवर्तित करें।
byte[] buffer = ASCIIEncoding.ASCII.GetBytes(str);
बेशक आप किस एन्कोडिंग का उपयोग करते हैं, इस पर निर्भर करता है कि सर्वर क्या एन्कोडिंग करता है।
char.MinValue –
जाने के लिए वास्तविक सी # तरीका है यह अब तक का सबसे सरल (और सबसे विश्वसनीय) तरीका है जो मैंने अभी तक पाया है। यह स्वीकार्य उत्तर होना चाहिए। – jhmckimm
- 1. सी ++, एएसओ को बढ़ावा दें, शून्य समाप्त टर्मिंग स्ट्रिंग प्राप्त करें
- 2. सी # में एक स्ट्रिंग से विशिष्ट रेखा कैसे प्राप्त करें?
- 3. सी # टेक्स्टबॉक्स से स्ट्रिंग प्राप्त करें
- 4. सी #: स्ट्रिंग में स्ट्रिंग की लंबाई कैसे प्राप्त करें []
- 5. ऑब्जेक्टिव-सी है, तो एक स्ट्रिंग शून्य
- 6. कनेक्शन कैसे प्राप्त करें डेटाबेस से स्ट्रिंग
- 7. स्कैला - एक स्ट्रिंग से कक्षा प्राप्त करें
- 8. सी # खाली स्ट्रिंग -> शून्य?
- 9. URL स्ट्रिंग से पैरामीटर कैसे प्राप्त करें?
- 10. url से json स्ट्रिंग कैसे प्राप्त करें?
- 11. सी # में स्ट्रिंग से सबस्ट्रिंग कैसे प्राप्त करें?
- 12. सी # प्रतिबिंब: स्ट्रिंग से वर्ग संदर्भ कैसे प्राप्त करें?
- 13. रेगेक्स: स्ट्रिंग से शब्द कैसे प्राप्त करें (सी #)
- 14. सी # में स्ट्रिंग से केवल अक्षरों को कैसे प्राप्त करें?
- 15. स्ट्रिंग ऑब्जेक्ट से System.IO.Stream कैसे प्राप्त करें
- 16. क्वेरी स्ट्रिंग से # मान कैसे प्राप्त करें?
- 17. सी #: किसी निश्चित संस्कृति से संसाधन स्ट्रिंग कैसे प्राप्त करें
- 18. स्ट्रिंग में पैडिंग शून्य
- 19. एसक्यूएल में एक स्ट्रिंग से महीने कैसे प्राप्त करें?
- 20. जेएस में एक स्ट्रिंग से हेक्स पूर्णांक कैसे प्राप्त करें?
- 21. यूआरएल से एक स्ट्रिंग
- 22. एन्कोडेड बाइट्स से स्ट्रिंग डेटा प्राप्त करें
- 23. विभाजक से पहले पहली स्ट्रिंग प्राप्त करें?
- 24. एक स्ट्रिंग सी #
- 25. सी में एक स्ट्रिंग पर फिर से कैसे करें?
- 26. एक टेक्स्टकूट बॉक्स से स्ट्रिंग प्राप्त करना
- 27. खाली स्ट्रिंग अगर शून्य
- 28. सी # माह स्ट्रिंग से महीना INT प्राप्त करें
- 29. दिनांक/समय स्ट्रिंग से समय प्राप्त करें
- 30. सी # में एक स्ट्रिंग से एक रासायनिक सूत्र को पार्स करना? एक स्ट्रिंग से सी # में:
मैं बेस-राइट (this._encoding.GetBytes (नया char [] {'\ u0000'}) का उपयोग करने के लिए सुझाव देता हूं, इसके बजाय, शून्य-टर्मिनेटर को एन्कोड करने के लिए। डिफ़ॉल्ट यूटीएफ -16 2 बाइट्स है और अंत में दो 0-बाइट्स की अपेक्षा करता है। – toong
"\ 0" के साथ मान संलग्न करें (यदि यह पहले से समाप्त नहीं होता है): 'if (! Value.EndsWith (" \ 0 ")) मान + =" \ 0 "; इसलिए समाधान बनाना ** एन्कोडिंग - निर्भरता ** (आपको शून्य की संख्या के बारे में चिंता करने की ज़रूरत नहीं है)। – marchewek