【问题标题】:How to create byte array from NSData如何从 NSData 创建字节数组
【发布时间】:2011-12-22 14:14:16
【问题描述】:

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

NSData* data = UIImagePNGRepresentation(img);

【问题讨论】:

标签: iphone ios


【解决方案1】:

如果你只想阅读它们,有一个非常简单的方法:

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) ;)

【讨论】:

  • 或者这样UInt8 *bytes = (UInt8 *)[data subdataWithRange:(NSRange){0,length}].bytes
【解决方案2】:

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

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

在尝试获取 byte#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;
}

【讨论】:

  • xcode 6 使用不兼容类型 const void 的表达式初始化“unsigned char”会引发错误。 ... unsigned char byteFromArray = data.bytes[i];
猜你喜欢
  • 2010-09-26
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多