How to read bytes from NSData

You can also create an NSInputStream from an NSData object, if you need the read interface:

NSData *data = ...;
NSInputStream *readData = [[NSInputStream alloc] initWithData:data];
[readData open];

However, you should be aware that initWithData copies the contents of data.


One of the simplest ways is to use NSData getBytes:range:.

NSData *data = ...;
char buffer[numberOfBytes];
[data getBytes:buffer range:NSMakeRange(position, numberOfBytes)];

where position and length is the position you want to read from in NSData and the length is how many bytes you want to read. No need to copy.


How to read binary bytes in NSData? may help you:

NSString *path = @"…put the path to your file here…";
NSData * fileData = [NSData dataWithContentsOfFile: path];
const char* fileBytes = (const char*)[fileData bytes];
NSUInteger length = [fileData length];
NSUInteger index;

for (index = 0; index<length; index++) {
   char aByte = fileBytes[index];
   //Do something with each byte
}