On 13 Jul 2009, at 22:02, Chase Meadors wrote:
Hi, I'm having some confusion here over displaying raw binary data.
I have my NSMutableData object that I'm getting the bytes from. As I  
understand it, there are different ways to get the bytes.
The -getBytes:range: method

NSRange r = NSMakeRange(x, y);
char buf[y];
[data getBytes:&buf length:r];
getBytes:length: takes a scalar argument for length, not a NSRange  
object. You're probably thinking of getBytes:range:. However, I'd  
recommend strongly against using stack allocation (particularly  
variable-length stack allocation) for a buffer of unknown, potentially  
large size.
Or the -bytes or -mutableBytes methods

char buf = [data bytes];

What is the generally accepted method of doing this? I'm using the first method, as the other one sometimes crashes.
It won't crash if you assign it to a variable of the proper type:

char *buf = [data bytes];

Second, I'm testing the data with the following code:

for (int i = 0;  i < aNumber;  i ++) {
        NSLog(@"%02X", buf[i]);
}

This is what's really bothering me because I'll get normal bytes, like 2E 00 AA, but sometimes, seemingly randomly, there are six leading F's.
Hardly random. It's occurring for every value with the high bit set  
(0x80 - 0xff).
Read: http://en.wikipedia.org/wiki/Sign_extension

Then switch "char" to "unsigned char" and you'll get the results you're expecting.
_______________________________________________

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 arch...@mail-archive.com

Reply via email to