سؤال

أريد إرسال nsarray، لذلك يجب أن أكتبها إلى nsoutputstream أولا. يجب أن تكون الطريقة:

- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length

يمكنني تحويل مؤشر الصفيف إلى UINT8 _ T باستخدام:

(uint8_t *)arr

ولكن كيفية الحصول على طول البايت من الصفيف؟ هل يجب علي حفظ الصفيف إلى ملف وقراءته باسم NSDATA؟

هل كانت مفيدة؟

المحلول

يمكنني تحويل مؤشر الصفيف إلى UINT8 _ T باستخدام:

(uint8_t *)arr

هذا مجرد ممثلين؛ لا يقوم بالفعل بتحويل الصفيف إلى سلسلة من البايتات. حتى لو أرسلت التخزين الخاص للمجموعة فوق السلك، فإن محتويات الصفيف هي مجرد عناوين الذاكرة إلى كائنات أخرى. لا تكون عناوين الذاكرة في عمليةك هي بالتأكيد هي نفسها في عملية الاستقبال - وهذا يفترض أن عملية الاستقبال تعمل على تشغيل الكاكاو وسوف تتوقع NSARRAY!

تحتاج إلى تسلسل محتويات الصفيف إلى بعض التمثيل الخارجي بأن جهاز الاستقبال سيكون قادرا على التعامل معه. يمكنك القيام بذلك تحويل إلى باطن, ، وخلق nsxmldocument. و الحصول على بياناتها, أو تجميع تمثيل مخصص للتنسيق باليد - ولكن ليس مع المصبوب وحده.

ولكن كيفية الحصول على طول البايت من الصفيف؟

الصفيف ليس سلسلة من البايتات؛ إنه كائن. على هذا النحو، ليس لديها طول، فقط (كصفيف) عدد الكائنات الموجودة فيه. تحتاج إلى سلسلة من البايتات قبل أن تتمكن من الحصول على طول السلسلة.

هل يجب علي حفظ الصفيف إلى ملف وقراءته باسم NSDATA؟

تحتاج إلى الحصول على تمثيل خارجي للمجموعة، ويفضل أن يكون ذلك في كائن NSDATA. أخبرها أن تكتب (مع شاشة) نفسها إلى ملف وقراءة الملف مرة أخرى في طريقة واحدة، ولكن هناك طرق أفضل بكثير، والتي أدرجتها أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top