8
所以基本上我的問題是,我創建一個NSMutableDictionary使用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來實現。 – 2010-09-19 17:01:09
你是誤解。我的意思在第二段是'[NSNumber的numberWithLongLong:73]'將產生相同的對象'[NSNumber的numberWithChar:73]',而不是一個由'長long'和其他對象產生對象返回由'char'支持。現在我很煩重新檢查,10.6.4中並不是這種情況。 (你可以用'CFShow()'來檢查它,它會告訴你內部表示。) – 2010-09-19 20:04:34