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 ([email protected])
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]