तो अनिवार्य रूप से मेरा प्रश्न यह है कि, मैं 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 बिट मशीनों पर अगर मैं किसी भी बड़ी संख्या में इन वस्तुओं का आवंटन ढेर अंतरिक्ष की टन ....
कारण यह कोई फर्क नहीं पड़ता कि संकलक प्रयुक्त प्रकार की वास्तविक बिटविड्थ के बारे में सबसे अच्छा जानता है। यदि वे मेल नहीं खाते हैं, तो एक दूसरे को परिवर्तित कर दिया जाता है - या तो बिट्स को क्लिप करके या अग्रणी 0 के साथ विस्तार करके। –
आप गलतफहमी कर रहे हैं। दूसरे अनुच्छेद में मेरा क्या मतलब है कि '[NSNumber numberWithLongLong: 73]' एक वस्तु को 'लंबे समय तक' ऑब्जेक्ट का उत्पादन करने के बजाए एक ही वस्तु का उत्पादन करेगा [एनएसएनंबर संख्या विथहर: 73] 'और दूसरा ऑब्जेक्ट एक 'char' द्वारा समर्थित। अब मैं फिर से जांच करने के लिए परेशान हूं, यह 10.6.4 में मामला नहीं है। (आप इसे 'CFShow()' के साथ देख सकते हैं, जो आपको आंतरिक प्रतिनिधित्व बताता है।) –