2

重複の可能性:
C#配列、既存の配列からのサブ配列の取得

基本的にはbyte[]毎回違うものがありますが、同じ長さになります。

その後、必要なデータを含むバイト数が増えます。

それが意味をなさない場合、これは基本的に私が意味することです。

"samebytesDataNeededIsHere"

そのため、「samebytes」以降のデータを取得する必要がありますが、その方法がわかりません。私は検索しましたが、バイトパターン以外には何もありませんが、それは私が本当に必要としているものではありません。

4

3 に答える 3

7

どうですか

byte[] bytes = Encoding.UTF8.GetBytes("samebytesDataNeededIsHere");
byte[] bytesToUse = bytes.Skip(countOfBytesToSkip).ToArray();
于 2012-08-21T13:23:51.747 に答える
2

これで何をしているのかはまだ言っていませんが、多くのbyte[]処理コードでは、バッファへのオフセットを使用しています...したがって、最初にこのオフセットをに設定する代わりに0、「同じ」の長さに設定します。バイト」。

ラップインしている場合は、作業する前にその番号に転送をMemoryStream設定することができます。Position

Buffer.BlockCopy最後に、開始オフセットを指定して、おそらくを使用して、目的のデータをコピーすることができます。2番目のバッファとブロックコピーは冗長であるため、これは私の最も好ましくないオプションです(すでにデータがあり、どこを見たいかがわかっています)。

例:

// invent some initial data
byte[] data = Encoding.ASCII.GetBytes("samebytesDataNeededIsHere");
int fixedOffset = 9; // length of samebytes

// as a segment
ArraySegment<byte> segment = new ArraySegment<byte>(data,
     fixedOffset, data.Length - fixedOffset);

// as a separate buffer
byte[] copy = new byte[data.Length - fixedOffset];
Buffer.BlockCopy(data, fixedOffset, copy, 0, copy.Length);

// as a stream
var ms = new MemoryStream(data, fixedOffset, data.Length - fixedOffset);

// or just directly
for(int i = fixedOffset ; i < data.Length ; i++) {
   // access data[i]
}
于 2012-08-21T13:21:47.537 に答える
0

定数開始インデックスからバイト配列の一部を取得する方法を求めていると思います。これを行うにはさまざまな方法があります。

まず、単純なループ:

// make sure you use the correct encoding
// see http://msdn.microsoft.com/en-us/library/ds4kkd55.aspx
byte[] bytes = Encoding.UTF8.GetBytes( "samebytesDataNeededIsHere" );

for( int i = startIndex; i < bytes.Length; i++ ){
  byte b = bytes[i]; // now do something with the value...
}

Array.CopyToを使用して、1つの配列の一部を新しい配列にコピーすることもできます。もちろん、かなりのサイズの配列を扱っている場合は、それをコピーするのではなく、反復するか、ストリームとして使用することをお勧めします(@MarcGravellが示唆しているように)。

于 2012-08-21T13:22:05.973 に答える