Mam macierz o stałej długości, która ma 1250 bajtów długości. Może zawierać następujące typy danych:Parsująca tablica bajtów, która zawiera różne typy danych.
Obiekt A, który składa się z 5 bajtów. Pierwszy bajt zawiera literę "A" o numerze , a kolejne cztery bajty przechowują liczbę całkowitą od 1 do 100000.
Obiekt B, który składa się z 2 bajtów. Pierwszy bajt zawiera literę "B", a następny bajt zawiera liczbę całkowitą od 1 - 100.
Obiekt C, który składa się z 50 bajtów. Wszystkie 50 bajty są używane do przechowywania ciąg ASCII zakodowany które tylko składać się z numerów oraz następujące znaki: - + (i)
nie wiem ilu z każdego typu obiektu są w tablicy bajtów, ale wiem, że są one zgrupowane razem (Obiekt B, Obiekt B, Obiekt A, Obiekt A, Obiekt A, Obiekt C itd.). W większości przypadków, gdy parsuję tablicę bajtów, tablica zawiera dane jednego typu (wszystkie obiekty to na przykład obiekt A), więc wiem dokładnie, z ilu bajtów składa się każdy element i po prostu przechodzę przez tablicę przetwarzającą bajty . W tym przypadku mam trzy różne typy danych, które mają różne długości. Myślałam, że muszę zrobić coś takiego:
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;
}
}
Czy istnieje lepszy sposób to zrobić?
Co jeśli łańcuch zawarty w instancji klasy C zaczyna się od znaku "B"? Jak będziesz wiedział, jak to rozpakować? Musisz wyemitować rodzaj informacji o typie. – Matt
Czy przechowujesz te informacje, czy te wcześniejsze dane próbujesz wczytać? Pytam, ponieważ istnieją znacznie łatwiejsze sposoby przechowywania danych niż tablice bajtów. – sircodesalot
@Matt Nie udało mi się powiedzieć, że ciąg reprezentowany przez Obiekt C będzie składał się wyłącznie z liczb. Jeśli tak nie jest, jakie informacje o typie sugerujesz? – user685869