如何从NSData创建字节数组

时间:2011-11-05 09:46:29

标签: iphone ios

请任何人指导我如何从nsdata创建字节数组这里是我创建nsdata的代码

NSData* data = UIImagePNGRepresentation(img);

2 个答案:

答案 0 :(得分:3)

如果您只想阅读它们,那么有一种非常简单的方法:

unsigned char *bytes = [data bytes];

如果您想编辑数据,可以使用method on NSData that does this

// Make your array to hold the bytes
NSUInteger length = [data length];
unsigned char *bytes = malloc( length * sizeof(unsigned char) );

// Get the data
[data getBytes:bytes length:length];

注意:不要忘记 - 如果您要复制数据,您还必须在某个时候致电free(bytes);)

答案 1 :(得分:2)

这是获得数组的最快方式(但非常危险):

unsigned char *bytesArray = data.bytes;
NSUInteger lengthOfBytesArray = data.length;

在尝试获取字节#100之前,您应该检查lengthOfBytesArray,如:

if (lengthOfBytesArray > 100 + 1)
{
    unsigned char byteWithOffset100 = bytesArray[100];
}

另一种安全且更像objc的方式:

- (NSArray*) arrayOfBytesFromData:(NSData*) data
{
    if (data.length > 0)
    {
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:data.length];
        NSUInteger i = 0;

        for (i = 0; i < data.length; i++)
        {
            unsigned char byteFromArray = data.bytes[i];
            [array addObject:[NSValue valueWithBytes:&byteFromArray 
                                            objCType:@encode(unsigned char)]];
        }

        return [NSArray arrayWithArray:array];
    }

    return nil;
}