appendBytesに相当するgetは見つかりませんでした。getBytesを正しく理解していれば、そのメソッドは常にバッファーの先頭からバイトを返します。インクリメントしません。
これの理由は何ですか?
appendBytesに相当するgetは見つかりませんでした。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:
またはを使用してストリームから読み取ることができます-read:maxLength:
。
NSInputStream *stream = [[NSInputStream alloc] initWithData:myData];
[stream open];
while ([stream read:&buffer maxLength:bufferLength] > 0) {
// do something with buffer
}
注:while
読み取るデータの各チャンクに対して同じことを行わない場合は、明らかに上記のコードにループは必要ありません。データを読み取る一般的な方法であるため、ループを含めただけです。
あなたの質問は明確ではありません。
特定のオフセットからバイトを取得する必要がある場合は、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 ) ];
を探している場合は、 NSMutableDataappendBytes
を使用します。これは NSData から継承し、およびと同様に可変オプションを追加します。NSArray
NSMutableArray
- ( void )appendBytes: ( const void * )bytes length: ( NSUInteger )length;
メソッドを使用してaNSMutableData
から aを取得できます。結果のオブジェクトを所有していることに注意してください。NSData
mutableCopy
NSMutableData * mData;
mData = [ dataObject mutableCopy ];
[ mData appendBytes: ( const void * )"abcd" length: 4 ];
[ mData release ]
を探しているかもしれません-[NSData getBytes:range:]
。これにより、バッファから読み取るデータの範囲を指定できます。別のオプションは です。これは、指定された範囲のバイトのみを含む-[NSData subdataWithRange:]
別のインスタンスを実際に返します。NSData