0

appendBytesに相当するgetは見つかりませんでした。getBytesを正しく理解していれば、そのメソッドは常にバッファーの先頭からバイトを返します。インクリメントしません。

これの理由は何ですか?

4

4 に答える 4

3

私はあなたが何を意味するのかわからない、同等ですか?appendBytesgetBytes が取得している間は追加されますが、それらは完全に反対です。これは、バッファに異なるデータがある場合にバイトを取得するために使用する優れた方法です。の素敵な使い方を示しています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:またはを使用してストリームから読み取ることができます-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

あなたの質問は明確ではありません。

特定のオフセットからバイトを取得する必要がある場合は、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 から継承し、およびと同様に可変オプションを追加します。NSArrayNSMutableArray

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

メソッドを使用してaNSMutableDataから aを取得できます。結果のオブジェクトを所有していることに注意してください。NSDatamutableCopy

NSMutableData * mData;

mData = [ dataObject mutableCopy ];

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

を探しているかもしれません-[NSData getBytes:range:]。これにより、バッファから読み取るデータの範囲を指定できます。別のオプションは です。これは、指定された範囲のバイトのみを含む-[NSData subdataWithRange:]別のインスタンスを実際に返します。NSData

于 2012-09-17T18:38:35.607 に答える