delphi - Wrtiting string to TMemoryStream - Pointer to string -


इसमें अंतर क्या है

यह:

  SourceString: = 'मैं बस ठीक कर रहा हूं!'; MemoryStream.ReadBuffer (पॉइन्टर (स्रोत स्ट्रिंग) ^, xxx);  

(पूर्ण स्रोत कोड यहां उपलब्ध है:)

और यह कोड (मेरा):

  SetLength (स्रोतस्ट्रिंग, xxx); MemoryStream.ReadBuffer (स्रोत स्ट्रिंग [1], xxx);  
  1. क्या मुझे वास्तव में पॉइन्टर (स्रोत स्ट्रिंग) ^ या सोर्सस्ट्रिंग [1] का उपयोग करना ठीक है?
  2. कोड (दोनों) काम करेंगे डेल्फी 2010 (यूनिकोड) के साथ

1: स्रोत स्ट्रिंग [1] संस्करण अधिक पठनीय है मैं पूरी तरह से जरूरी नहीं हैं जब पॉइंटर्स के साथ काम नहीं करना पसंद करते हैं।

2: यह कोड नहीं यूनिकोड के साथ काम करेगा। आपको इसे गुणा करना होगा: xxx * sizeof (char) । (यह डेल्फी के पूर्व और पोस्ट-यूनिकोड दोनों संस्करणों के साथ काम करेगा।) लेकिन जब तक आप गैर-एनसीआई वर्णों का भारी उपयोग नहीं कर रहे हैं, यह अंतरिक्ष का बड़ा अपशिष्ट होगा मुझे क्या करना पसंद है:

<पूर्व> प्रक्रिया TStreamEx.WriteString (डेटा समीकरण: स्ट्रिंग); वेर लेन: कार्डिनल; ओस्ट्रिंग: यूटीएफ 8 स्ट्रिंग; शुरू oString: = UTF8 स्ट्रिंग (डेटा); लेन: = लंबाई (ऑस्ट्रिंग); स्वयं। राइटबफर (लेन, 4); अगर लैन & gt; 0 तब स्व। वाइटबफर (ओस्ट्रिंग [1], लेन); समाप्त; प्रक्रिया TStreamEx.ReadString (डेटा समरूप: स्ट्रिंग); वेर लेन: कार्डिनल; आईस्ट्रिंग: यूटीएफ 8 स्ट्रिंग; स्वयं शुरू करो। रीडबफर (लेन, 4); अगर लैन & gt; 0 फिर सेट लैंघ (आईस्ट्रिंग, लेन); स्वयं। रीडबफर (आईस्ट्रिंग [1], लेन); परिणाम: = स्ट्रिंग (iString); अंत परिणाम: = ''; समाप्त;

(यह एक Tstream के लिए वर्ग सहायक का हिस्सा है मैंने लिखा है कि यह बहुत आसानी से पढ़ता है और विभिन्न चीज़ों को और धाराओं से लिखता है। लेकिन अगर आप कक्षा सहायकों को पसंद नहीं करते हैं, मूल विचार को किसी भिन्न प्रारूप में अनुकूलित करना बहुत मुश्किल नहीं होना चाहिए।)


Comments