Vì vậy, về cơ bản câu hỏi của tôi là điều này, tôi đang tạo một NSMutableDictionary sử dụng các đối tượng uint64_t làm khóa.Chuyển đổi (u) int64_t thành NSNumbers
Có cách nào tốt hơn để tạo chúng hơn làm việc này không?
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
Điều này sẽ hoạt động miễn là bạn không đưa vào tệp nhị phân/ổ cắm/đối tượng NSData/bất kỳ thứ gì. Nhưng có cách nào tốt hơn để làm điều này? Tôi thực sự muốn chắc chắn rằng đối tượng là 64-bit bất kể nền tảng nào tôi chạy nó.
Tôi đoán tôi chỉ có thể tránh được toàn bộ vấn đề bằng cách luôn luôn đi unsigned dài dài nhưng tất nhiên rằng chất thải tấn của không gian đống trên máy 64 bit nếu tôi bố trí các đối tượng trong bất kỳ số lượng lớn ....
Lý do tại sao không quan trọng là trình biên dịch biết rõ nhất về các bitwidth thực tế của các loại được sử dụng. Nếu chúng không khớp nhau, một được chuyển đổi thành cái khác - hoặc bằng cách cắt các bit hoặc bằng cách kéo dài với số 0 đầu. –
Bạn hiểu lầm. Ý tôi trong đoạn thứ hai là '[NSNumber numberWithLongLong: 73]' sẽ tạo ra cùng một đối tượng với '[NSNumber numberWithChar: 73]', chứ không phải một đối tượng tạo ra một đối tượng trở lại bởi một 'long long' và một đối tượng khác được hỗ trợ bởi một 'char'. Bây giờ tôi bận tâm kiểm tra lại, đây không phải là trường hợp trong 10.6.4. (Bạn có thể kiểm tra điều này bằng 'CFShow()', cho bạn biết biểu diễn bên trong.) –