我没有找到任何相当于appendBytes的get。如果我已正确理解getBytes,则该方法始终从缓冲区的 start 返回字节。它不会增加。
这是什么原因?
答案 0 :(得分:3)
我不确定你的意思,相当于什么?当getBytes获得时,appendBytes
会添加,它们是完全相反的。当缓冲区中有不同的数据时,这是一个很好的方法来获取字节。它显示了getBytes:range:
UInt16 anUInt16;
float aFloat;
int position = 0;
[data getBytes:&anUInt16 range:NSMakeRange(position, sizeof(UInt16))];
position += sizeof(UInt16);
[data getBytes:&aFloat range:NSMakeRange(position, sizeof(float))];
position += sizeof(float);
依旧......
答案 1 :(得分:2)
有几种方法可以访问NSData对象中的某些部分数据。例如,您可以使用-getBytes:range:
将NSRange指定的数据复制到缓冲区中。或者您可以使用-subdataWithRange:
来获取仅包含另一部分的NSData。
如果要按顺序读取NSData对象的内容,可以创建NSInputStream并使用NSData对其进行初始化,然后使用-getBuffer:length:
或-read:maxLength:
从流中读取。
NSInputStream *stream = [[NSInputStream alloc] initWithData:myData];
[stream open];
while ([stream read:&buffer maxLength:bufferLength] > 0) {
// do something with buffer
}
注意:如果你没有对你读取的每一块数据做同样的事情,你显然不需要上面代码中的while
循环 - 我只是把它包括在内,因为它是一种常见的方式阅读数据。
答案 2 :(得分:1)
您可能正在寻找-[NSData getBytes:range:]
,它允许您指定要从缓冲区中读取的数据范围。另一个选项是-[NSData subdataWithRange:]
,它实际上返回另一个仅包含指定范围内字节的NSData
实例。
答案 3 :(得分:1)
你的问题不明确。
如果需要从特定偏移量中获取字节,只需使用getBytes:range:
方法。
- ( void )getBytes: ( void * )buffer range: ( NSRange )range;
例如:
char buf[ 4 ];
// Get 4 bytes from offset 2
[ dataObject getBytes: buf range: NSMakeRange( 2, 4 ) ];
如果您正在寻找appendBytes
,请使用 NSMutableData ,它继承自NSData并添加可变性选项,就像NSArray
和{{1 }}
NSMutableArray
您可以使用- ( void )appendBytes: ( const void * )bytes length: ( NSUInteger )length;
方法从NSMutableData
获取NSData
。请注意,您拥有生成的对象。
mutableCopy