0

在 Java 中,我有一个字节数组表示,在 iOS 中我表示为 NSData。

一切正常 - 与 Java 相比,iOS 中的某些访问方法看起来相当笨拙。

在 Java 中访问单个字节:byteArray[i]

在 iOS 中,我一直使用它,其中 byteArray 是 NSData:

 Byte b;
 [byteArray getBytes: &b range: NSMakeRange( i, 1 )];

难道没有更直接的写法,类似于Java吗?

4

1 回答 1

3

考虑不使用 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];
于 2013-06-09T16:08:14.527 回答