【发布时间】:2011-12-22 14:14:16
【问题描述】:
请任何人指导我如何从 nsdata 创建字节数组这是我创建 nsdata 的代码
NSData* data = UIImagePNGRepresentation(img);
【问题讨论】:
-
试试this回答我觉得对你有帮助
-
您阅读了documentation for NSData。其他一切都只是简单的 C 代码。
请任何人指导我如何从 nsdata 创建字节数组这是我创建 nsdata 的代码
NSData* data = UIImagePNGRepresentation(img);
【问题讨论】:
如果你只想阅读它们,有一个非常简单的方法:
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
这是获取数组的最快方法(但非常危险):
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;
}
【讨论】: