2012-04-16 25 views
13

मैंने खोजा है। लेकिन अभी भी इसे प्राप्त नहीं कर सका।एनएसटीएटी को एनएसएसटींग रिटर्न शून्य

मैं एनएसडीटा को एनएसएसटींग में परिवर्तित कर रहा हूं। जब मैं [data description]; करता हूं तो यह मुझे < 00000000 31323334 35363738> हां, मैं अपनी स्ट्रिंग @ 12345678 "प्राप्त कर रहा हूं।

मैं इसे एनएसएसटींग में उचित रूप से कैसे परिवर्तित करूं? मैंने

NSString *b = [NSString stringWithUTF8String:[data bytes]]; 
NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding]; 

दोनों ने मुझे शून्य वापस कर दिया। कोई विचार? धन्यवाद

हाय सब, सभी सुझावों के लिए धन्यवाद। यह निरंतर प्रतीत होता है जिससे एक शून्य चरित्र हमेशा सामने आता है। तो जब भी मुझे कुछ मिलता है, तो मैं पहले < 00000000> को हटा देता हूं, फिर इसके कामकाजी ठीक पहले से ही

+0

एसओ में एक खोज आपको जवाब मिलेगी – SomaMan

+0

हाय, मैं लोगों के जवाब को कैसे स्वीकार करूं? मैंने अप कुंजी पर क्लिक करने की कोशिश की लेकिन यह कहता है कि मुझे 15 से अधिक प्रतिष्ठा – user774150

उत्तर

26

ऐसा होता है यदि एन्कोडिंग गलत है।

परीक्षण के लिए ASCII का उपयोग करने का प्रयास करें। एएससीआईआई लगभग निश्चित रूप से स्ट्रिंग के कुछ भाग को पुनः प्राप्त करने के लिए काम करता है। यदि यह केवल संख्या है तो यह शायद काम करेगा।

NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSASCIIStringEncoding]; 

सबसे आम को छोड़कर UTF-8 enconding है:

NSASCIIStringEncoding 
NSUnicodeStringEncoding 
NSISOLatin1StringEncoding 
NSISOLatin2StringEncoding 
NSSymbolStringEncoding 

उन्हें बाहर की कोशिश करें और देखें कि वे काम करते हैं।

+1

NSASCIIStringEncoding मेरे लिए काम करने की आवश्यकता है। धन्यवाद। –

6

मैं एनएसडीटा को एनएसएसटींग में परिवर्तित कर रहा हूं। जब मैं [डेटा विवरण] करता हूं; यह मुझे < 00000000 31323334 35363738 देता है> हां, मैं अपनी स्ट्रिंग @ 12345678 "प्राप्त कर रहा हूं।

नहीं - आपको वह स्ट्रिंग नहीं मिल रही है। आपको एक बाइट अनुक्रम प्राप्त हो रहा है जो 0x00 मानों के समूह से शुरू होता है और इसके बाद बाइट्स की एक श्रृंखला होती है जो ASCII अनुक्रम "12345678" के अनुरूप होती है।

आईई। आपके पास कच्चा डेटा है और इसे एक बाध्य प्रकार में बदलने की कोशिश कर रहे हैं, लेकिन ऐसा नहीं कर सकता क्योंकि बाधित प्रकार कच्चे डेटा का प्रतिनिधित्व नहीं कर सकता है।

आप एनएसएसटींग पर "हानिकारक रूपांतरण" एपीआई का उपयोग करने का प्रयास कर सकते हैं, लेकिन यह काम नहीं कर सकता है और वैसे भी नाजुक होगा।

सर्वश्रेष्ठ शर्त?

केवल एनएसडीटा में बाइट्स को परिवर्तित करें जो वास्तव में एनएसएसटींग के उदाहरण के लिए स्ट्रिंग का प्रतिनिधित्व करते हैं। यह -initWithBytes:length:encoding: के साथ किया जा सकता है; आपको सही ऑफसेट और लंबाई खोजने के लिए गणना करने की आवश्यकता होगी।

2

ऐसा इसलिए हो सकता है क्योंकि आपके डेटा का पहला बाइट 00 है। वर्ण 0 स्ट्रिंग वर्ण का अंत है। ASCII से एक स्ट्रिंग बनाते समय (वर्णों की सरणी या बाइट्स की सरणी से), जब शुरुआत में वर्ण 0 का सामना करना पड़ता है, तो यह एक खाली स्ट्रिंग उत्पन्न करता है।

हालांकि मैं उम्मीद करता हूं कि यह 0 वर्णों के साथ एनएसएसटींग का एक उदाहरण लौटाएगा, न कि शून्य।

+1

कि एक स्ट्रिंग को '0x00' द्वारा समाप्त किया गया है केवल तभी सत्य है जब यह एक सी स्ट्रिंग है। अन्य स्ट्रिंग प्रकारों के लिए, उन्हें अक्सर एन्कोडिंग, लंबाई और डेटा के ट्रिपल के रूप में दर्शाया जाता है। एनएसएसटींग में यह मामला है; 0x00 स्ट्रिंग को समाप्त करने के बारे में सोचने में उसे छेड़छाड़ नहीं कर रहे हैं, वे एक त्रुटि को ट्रिगर कर रहे हैं क्योंकि 0x00 एक स्ट्रिंग के भीतर एक अर्थहीन बाइट अनुक्रम है। – bbum

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