NSData appendBytes等效

时间:2012-09-17 17:44:19

标签: objective-c nsdata

我没有找到任何相当于appendBytes的get。如果我已正确理解getBytes,则该方法始终从缓冲区的 start 返回字节。它不会增加。

这是什么原因?

4 个答案:

答案 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