在 Java 中,我有一个字节数组表示,在 iOS 中我表示为 NSData。
一切正常 - 与 Java 相比,iOS 中的某些访问方法看起来相当笨拙。
在 Java 中访问单个字节:byteArray[i]
在 iOS 中,我一直使用它,其中 byteArray 是 NSData:
Byte b;
[byteArray getBytes: &b range: NSMakeRange( i, 1 )];
难道没有更直接的写法,类似于Java吗?
考虑不使用 NSData 对象,您可以将其转换为 const void* 像这样。
NSdata *data = your data stuff
NSUInteger i = 1;
const char * array = [data bytes];
char c = array[i];
注意 这种数组是只读的!(常量无效*)
否则,您将不得不使用您已经提到的功能或Apple 提供的其他一些功能。
编辑
或者您可以向 NSData 添加一些类别
@interface NSData(NSDataAdditions)
- (char)byteAtIndex:(NSUInteger)index;
@end
@implementation NSData(NSDataAdditions)
- (char)byteAtIndex:(NSUInteger)index {
char c;
[self getBytes: &c range: NSMakeRange( index, 1 )];
return c;
}
@end
然后像这样访问您的数组:
NSdata *data = your data stuff
char c = [data byteAtIndex:i];