1250バイトの長さの固定長バイト配列があります。次のタイプのデータが含まれる場合があります。
5バイトで構成されるオブジェクトA。最初のバイトには文字「A」が含まれ、次の4バイトには1から100000までの整数が格納されます。
2バイトで構成されるオブジェクトB。最初のバイトには文字「B」が含まれ、次のバイトには1〜100の整数が含まれます。
50バイトで構成されるオブジェクトC。50バイトはすべて、数字と次の文字のみで構成されるASCIIエンコード文字列を格納するために使用されます。- +(および)
バイト配列に各オブジェクトタイプがいくつあるかはわかりませんが、それらがグループ化されていることは知っています(オブジェクトB、オブジェクトB、オブジェクトA、オブジェクトA、オブジェクトA、オブジェクトCなど)。ほとんどの場合、バイト配列を解析すると、配列には1つのタイプのデータが含まれます(たとえば、すべてのアイテムはオブジェクトAです)。したがって、各アイテムが何バイトで構成されているかを正確に把握し、配列をループしてバイトを処理します。 。この場合、すべて異なる長さの3つの異なるタイプのデータがあります。私は次のようなことをする必要があると思っていました:
int offset = 0;
while (offset <= 1250)
{
string objectHeader = Encoding.ASCII.GetString(byteArray, offset, 1);
if (objectHeader.Equals("A"))
{
// read 4 more bytes and then convert into int value (1 - 100000)
index += 5;
}
else if (objectHeader.Equals("B"))
{
// read 1 more byte and then convert into int value (1 - 100)
index += 2;
}
else
{
// read 49 more bytes and then convert into a string
index += 50;
}
}
これを行うためのより良い方法はありますか?