Re: Arbitrary length ints from NSData
Re: Arbitrary length ints from NSData
- Subject: Re: Arbitrary length ints from NSData
- From: Chase Meadors <email@hidden>
- Date: Thu, 13 Aug 2009 13:25:00 -0500
On Aug 13, 2009, at 1:17 PM, Quincey Morris wrote:
On Aug 13, 2009, at 10:34, Chase Meadors wrote:
In other words, I might read one piece of data that is one byte:
<FE>. I would want this to be read as -2. However, the current
method would make the string "0xFE", then scan it to 0x000000FE,
which is completely different.
I might then read a piece of data that is two bytes: <01 80>
(little endian). This needs to be read as -32,767. However, the
current method gives 0x00008001.
This is more of a C question. You could try something like:
[[NSScanner scannerWithString:hexString] scanHexInt:&result];
if ([self bytes] == 1)
result = (int8_t) result;
else if [self bytes] == 2)
result = (int16_t) result;
return [NSNumber numberWithInt:result];
Oh, I didn't realize this would work. Thank you.
IOW, you can use any C trick to sign-extend the shorter value.
P.S. Using NSScanner seems like a very long way round. Why not use a
multiply-by-256-and-add technique on the raw bytes? Then all you
need to do is to treat the first (i.e. the last) byte as signed, and
all the other bytes as unsigned, and your sign-extension problem is
solved too.
I'm a hobby programmer, and my first experience with programming was
the currency converter w/ interface builder example. As such, I guess
I'm learning "from the top down." I'm not very familiar with straight
C as I am with Objective-C. I'm afraid you'll have to explain the
multiply-by-256-and-add technique.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden