如何从NSData创建字节数组

3
请有人指导我如何从NSData创建字节数组,这是我的创建NSData的代码。
NSData* data = UIImagePNGRepresentation(img);

尝试使用这个答案,我认为它会对你有所帮助。 - salahy
你阅读了NSData的文档。其他所有内容都只是简单的C代码。 - Hot Licks
2个回答

3
如果你只想阅读它们,有一个非常简单的方法:
unsigned char *bytes = [data bytes];

如果您想编辑数据,可以使用NSData上的一个方法进行操作。具体请查看此链接
// 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];

NB 别忘了 - 如果你复制了数据,也必须在某个时刻调用 free(bytes) ;)

(注:NB为拉丁文Nota bene缩写,表示“请注意”)

3
或者这样:UInt8 *bytes = (UInt8 *)[data subdataWithRange:(NSRange){0,length}].bytes - Marcin

2

这是获取数组最快的方式(但比较危险):

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

在尝试获取第100个字节之前,您应该检查bytesArray的长度,例如:

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

还有一种更安全、更像Objective-C的方式:

- (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;
}

Xcode 6 对我进行了错误提示,提示信息为使用不兼容类型 const void 初始化 unsigned char。... unsigned char byteFromArray = data.bytes[i]; - johndpope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接