我还没有找到任何等效于 appendBytes 的方法。如果我正确理解了 getBytes,那么该方法总是从缓冲区的开头返回字节。它不会增加。
这是什么原因?
我还没有找到任何等效于 appendBytes 的方法。如果我正确理解了 getBytes,那么该方法总是从缓冲区的开头返回字节。它不会增加。
这是什么原因?
我不确定你的意思,等价?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);
等等...
有几种方法可以让您访问 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
注意:如果你没有对你读取的每个数据块做同样的事情,你显然不需要上面代码中的循环——我只是包含它,因为它是读取数据的常用方法。
您可能正在寻找-[NSData getBytes:range:]
,它可以让您指定要从缓冲区读取的数据范围。另一个选项是-[NSData subdataWithRange:]
,它实际上返回另一个NSData
仅包含指定范围内的字节的实例。
你的问题不清楚。
如果您需要从特定偏移量获取字节,只需使用该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
and一样NSMutableArray
。
- ( void )appendBytes: ( const void * )bytes length: ( NSUInteger )length;
您可以使用该方法NSMutableData
从 a中获取 a 。请注意,您拥有生成的对象。NSData
mutableCopy
NSMutableData * mData;
mData = [ dataObject mutableCopy ];
[ mData appendBytes: ( const void * )"abcd" length: 4 ];
[ mData release ]