On 7/17/08 12:01 PM, Jens Alfke said: >> Interesting. What about NSKeyedArchiver? It has, for example, >> encodeInt32:forKey: but no unsigned equivalent. What should one do if >> one wants to encode a uint32? Are there sign extension dangers here? > >It shouldn't be a problem as long as you call the matching decode >method (-decodeInt32ForKey:). You'll get back the same 32 bits you put >in. However, it could cause trouble if you read the archive using - >decodeInt64ForKey:, and assign the result to a 64-bit int, because in >that case you'll definitely get negative numbers out when you put in >large UInt32s with the high bit set.
Indeed, I've just confirmed this: uint32_t input = 0xFFFFFFFF; // 4294967295 NSMutableData* data = [NSMutableData data]; NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeInt32:(int32_t)input forKey:@"test"]; [archiver finishEncoding]; NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; int64_t output = [unarchiver decodeInt64ForKey:@"test"]; [unarchiver finishDecoding]; The value of output is _not_ 4294967295, it is -1. I wonder why they added "encodeInt32:forKey:" but not an unsigned version... -- ____________________________________________________________ Sean McBride, B. Eng [EMAIL PROTECTED] Rogue Research www.rogue-research.com Mac Software Developer Montréal, Québec, Canada _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]