I need to create an Objective-C method that converts an int into a byte array. In this instance, I can’t use NSArray as a return type, it must be an UInt8 array. I’ve written a simple method to do this, but it has errors during compile and tells me that I have incompatible return types. Here is the code snippet. Any ideas?
- (UInt8[])ConvertToBytes:(int) i
{
UInt8 *retVal[4];
retVal[0] = i >> 24;
retVal[1] = i >> 16;
retVal[2] = i >> 8;
retVal[3] = i >> 0;
return retVal;
}
You can’t return a local C array. You need to
malloc(sizeof(UInt8) * 4), populate that, return the pointer and of course don’t forget to free it when you’re done.Here’s an example of how it would be written and used (just to emphasize the importance of freeing the memory you allocate):
(You’ll probably notice that I also changed it to be a class method. Since it doesn’t depend on any attributes of the instance, it makes more sense for it to be a class method or even just a function. But that doesn’t have anything to do with how arrays and pointers work — I just like to use good coding style in examples.)