0

我还没有找到任何等效于 appendBytes 的方法。如果我正确理解了 getBytes,那么该方法总是从缓冲区的开头返回字节。它不会增加。

这是什么原因?

4

4 回答 4

3

我不确定你的意思,等价?appendBytes在 getBytes 获取时添加,它们是完全相反的。当缓冲区中有不同的数据时,这是我用来获取字节的好方法。它显示了一个很好的使用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);

等等...

于 2012-09-17T18:39:03.870 回答
2

有几种方法可以让您访问 NSData 对象中的某些数据。例如,您可以使用-getBytes:range:将 NSRange 指定的数据复制到缓冲区中。或者,您可以使用-subdataWithRange:获取仅包含另一个部分的 NSData。

如果您想按顺序读取 NSData 对象的内容,您可以创建一个 NSInputStream 并使用您的 NSData 对其进行初始化,然后使用-getBuffer:length:or从流中读取-read:maxLength:

NSInputStream *stream = [[NSInputStream alloc] initWithData:myData];
[stream open];
while ([stream read:&buffer maxLength:bufferLength] > 0) {
    // do something with buffer
}

while注意:如果你没有对你读取的每个数据块做同样的事情,你显然不需要上面代码中的循环——我只是包含它,因为它是读取数据的常用方法。

于 2012-09-17T18:38:53.753 回答
1

您可能正在寻找-[NSData getBytes:range:],它可以让您指定要从缓冲区读取的数据范围。另一个选项是-[NSData subdataWithRange:],它实际上返回另一个NSData仅包含指定范围内的字节的实例。

于 2012-09-17T18:38:35.607 回答
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 并添加可变性选项,就像NSArrayand一样NSMutableArray

- ( void )appendBytes: ( const void * )bytes length: ( NSUInteger )length;

您可以使用该方法NSMutableData从 a中获取 a 。请注意,您拥有生成的对象。NSDatamutableCopy

NSMutableData * mData;

mData = [ dataObject mutableCopy ];

[ mData appendBytes: ( const void * )"abcd" length: 4 ];
[ mData release ]
于 2012-09-17T18:58:32.363 回答