2010-09-19 20 views
8

तो अनिवार्य रूप से मेरा प्रश्न यह है कि, मैं uint64_t ऑब्जेक्ट्स का उपयोग करके एक एनएसएमयूटेबल डिक्शनरी बना रहा हूं।कनवर्ट करना (u) ​​int64_t से NSNumbers

क्या ऐसा करने से उन्हें बनाने का कोई बेहतर तरीका है?

uint64_t bob=7; 

NSNumber *bobsNumber; 

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
bobsNumber=[NSNumber numberWithUnsignedLong:bob]; 
#else 
bobsNumber=[NSNumber numberWithUnsignedLongLong:bob]; 
#endif 

यह जब तक आप एक बाइनरी फ़ाइल/सॉकेट/NSData वस्तु/जो कुछ भी शामिल नहीं किया था के रूप में काम करेगा। लेकिन क्या ऐसा करने का कोई बेहतर तरीका है? मैं वास्तव में यह सुनिश्चित करना चाहता हूं कि ऑब्जेक्ट 64-बिट्स है चाहे मैं इसे किस प्लेटफ़ॉर्म पर चलाता हूं।

मुझे लगता है कि मैं सिर्फ हमेशा के लिए जा रहा द्वारा पूरे मुद्दे से बचने सकता अहस्ताक्षरित लंबे लेकिन निश्चित रूप से है कि कचरे 64 बिट मशीनों पर अगर मैं किसी भी बड़ी संख्या में इन वस्तुओं का आवंटन ढेर अंतरिक्ष की टन ....

उत्तर

16

long long 64-बिट ओएस एक्स/आईओएस प्लेटफ़ॉर्म पर 64-बिट है। सभी ओपनस्टेप-अवरोही प्लेटफार्मों पर, numberWithUnsignedLongLong:uint64_t के लिए सही है।

पिछली बार मैंने चेक किया था कि आप जिस फैक्ट्री विधि का उपयोग करते हैं वह वास्तव में प्रस्तुति को प्रभावित नहीं करता है; यह केवल संख्या के मूल्य पर निर्भर है (जब तक कि आप बहुत छोटे आकार का उपयोग नहीं करते हैं, जिससे इसे छोटा किया जा सकता है)।

अद्यतन: इन दिनों, सही उत्तर NSNumber *bobsNumber = @(bob); है।

+0

कारण यह कोई फर्क नहीं पड़ता कि संकलक प्रयुक्त प्रकार की वास्तविक बिटविड्थ के बारे में सबसे अच्छा जानता है। यदि वे मेल नहीं खाते हैं, तो एक दूसरे को परिवर्तित कर दिया जाता है - या तो बिट्स को क्लिप करके या अग्रणी 0 के साथ विस्तार करके। –

+0

आप गलतफहमी कर रहे हैं। दूसरे अनुच्छेद में मेरा क्या मतलब है कि '[NSNumber numberWithLongLong: 73]' एक वस्तु को 'लंबे समय तक' ऑब्जेक्ट का उत्पादन करने के बजाए एक ही वस्तु का उत्पादन करेगा [एनएसएनंबर संख्या विथहर: 73] 'और दूसरा ऑब्जेक्ट एक 'char' द्वारा समर्थित। अब मैं फिर से जांच करने के लिए परेशान हूं, यह 10.6.4 में मामला नहीं है। (आप इसे 'CFShow()' के साथ देख सकते हैं, जो आपको आंतरिक प्रतिनिधित्व बताता है।) –