बाइट्स में स्ट्रिंग का आकार कैसे पता करें?


105

मैं सोच रहा हूँ कि क्या मैं जान सकता हूँ कि stringC # में a के लिए बाइट्स कितने समय में हैं , किसी को पता है?


की जाँच करें इस जवाब
dasblinkenlight

12
क्या आप पूछ रहे हैं कि कोई stringऑब्जेक्ट कितनी मेमोरी में रहती है, या एक फाइल पर लिखे जाने पर या एक नेटवर्क (यानी एनकोडेड) पर भेजे जाने पर एक स्ट्रिंग का प्रतिनिधित्व कितने बाइट्स पर होगा, क्योंकि वे दो पूरी तरह से अलग सवाल हैं। मैरिजेक ने पूर्व में लगभग उत्तर दिया जबकि दीया ने उत्तर दिया (कम से कम दो सामान्य एन्कोडिंग के लिए)।
एलोन गुरिलनेक


@AllonGuralnek: अच्छी बात है। क्या आप जानते हैं कि नीचे दीया ने System.Text.Encoding.Unicode.GetByteCount का उपयोग करने का सुझाव क्यों नहीं दिया? ASCIIEncoding का हिस्सा क्यों?
जियोर्जिम

@ जियोर्गी: चूंकि Unicodeएक स्थिर संपत्ति है System.Text.Encoding, जो आधार वर्ग है ASCIIEncoding, दोनों कथन वास्तव में समान हैं। आप उपवर्गों से एक स्थिर सदस्य तक पहुँच सकते हैं (लेकिन इसे मुहावरेदार नहीं माना जाता है)।
एलोन गुरिलनेक

जवाबों:


131

आप System.Text.Encodingवर्ग का उपयोग करके बाइट प्रति वर्ण पाने के लिए ASCII जैसे एन्कोडिंग का उपयोग कर सकते हैं ।

या यह कोशिश करो

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

13
मूर्खतापूर्ण सवाल, लेकिन हम कैसे जानेंगे कि यदि स्ट्रिंग में डेटा 3rd पार्टी फाइल से आया है तो वह यूनिकोड या ASCII वर्ग का उपयोग करेगा या नहीं?
मैथ्यू लॉक

7
@MatthewLock आपको यूटीएफ 16 (या मेजरिजेक का उपयोग करना चाहिए Length * sizeof(Char), जो प्रत्येक Charयूटीएफ 16/2-बाइट्स के बाद से एक ही परिणाम देना चाहिए ) यदि आप स्ट्रिंग के आंतरिक प्रतिनिधित्व के समान बाइट्स चाहते हैं। यदि आप वास्तव में अपने आंतरिक चरित्र सरणी में बाइट्स की संख्या के बजाय संपूर्ण ऑब्जेक्ट की मेमोरी की सटीक मात्रा चाहते हैं, तो आप एक अधिक सामान्य विधि पर विचार कर सकते हैं ।
बॉब

91

से MSDN :

एक Stringवस्तु का एक अनुक्रमिक संग्रह है System.Charवस्तुओं है कि एक स्ट्रिंग प्रतिनिधित्व करते हैं।

तो आप इसका उपयोग कर सकते हैं:

var howManyBytes = yourString.Length * sizeof(Char);

जहाँ तक मैं डेटा संरचना की मूल बातें समझ सकता हूँ, इसकी तुलना करने के लिए यह सबसे 'पाइन्ड'
चॉइस

2
लंबाई के सदस्य के आकार को ध्यान में रखना मत भूलना। int howManyBytes = yourString.Length * sizeof (चार) + sizeof (int);
ज़ोल्टन तिरिंडा

क्या होगा यदि मेरी स्ट्रिंग की लंबाई इंट से बड़ी है?
जरीज कस्तानोव्स

यह सही उत्तर होना चाहिए। इसके अलावा .Length क्या सर्वर की बाइट की मात्रा अगर आप उसी तार भेज देंगे। मुझे यही चाहिए था।
Dainisguy

24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

या

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.