Rozkodowanie kodu szesnastkowego

0

Jak rozkodować te znaki: "50433230303000005345415243480000002de8691cfd830d6486fb74abababab000000000086fb74"?
Część znaków jest w stringu a reszta nie wiem jak odczytać.
W kodowaniu ASCII wygląda to tak: "PC2000 SEARCH ..4.. d..t.... ..t"
Jak to rozkodować na obiekt nie znając struktury klasy?
Próbowałem tym

private static Head ByteArrayToObject(byte[] arrBytes)
        {
            MemoryStream memStream = new MemoryStream();
            BinaryFormatter binForm = new BinaryFormatter();
            memStream.Write(arrBytes, 0, arrBytes.Length);
            memStream.Seek(0, SeekOrigin.Begin);
            Head obj = (Head)binForm.Deserialize(memStream);
            return obj;
        }

i wyskakuje błąd:

System.Runtime.Serialization.SerializationException occurred
  HResult=0x8013150C
  Message=Strumień wejściowy nie ma prawidłowego formatu binarnego. Zawartość początkowa (w bajtach): 50-43-32-30-30-30-00-00-53-45-41-52-43-48-00-00-00 ...
  Source=mscorlib
  StackTrace:
   at System.Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read(__BinaryParser input)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadSerializationHeaderRecord()
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
1

Nieznając struktury nie jest możliwe przetworzenie tych bajtów na obiekt.

0

Na mój stary łeb to jest coś co się nazywa... nie pamiętam jak. Printable ASCII???
Każde 2 znaki to kod szesnastkowy znaku ASCII czyli
50 hex, to w ascii znak "P"
43 hex to znak "C"
32 to "2"

i tak dalej

[edit]
A chyba nie skumałem dokładnie o co chodzi.
Trzeba się pobawić, jeśli po stringu są liczby i wiesz co to może być to można próbować coś dopasować.

To jakieś urządzenie wysyła taki komunikat?

0

Rozkodować (deserializować) to w normalny sposób nie ma szans bez znajomości formatu danych lub dokładnej struktury klasy. Jedyne co można to dokładnie to badać i próbować rozkodować to "ręcznie". Daj więcej danych.

0

Urządzenie podglądane w Wireshark wysyła dane w kodzie szesnastkowym.
Sporą część już rozkodowałem przeglądając dane wynikowe i próbując je dopasować do kodu szesnastkowego.
Niestety nie umie dopasować tego kodu
80 26 5c 12 c2 63 d2 01
do daty 2017-01-01 00:00
Następna dana do testów to:
80 6c 1f 36 c2 63 d2 01
to data 2017-01-01 00:01
Próbowałem chyba już wszystkiego i brak mi pomysłów:

  • byte
  • ushort
  • uint
  • ulong
    po tym dekodowaniu nic mi nie wyszło bym mógł to dopasować do tej daty
0

Z czego masz te dane. Może to unix timestamp https://www.epochconverter.com/

0

Ok. Już rozpracowałem tą datę:
80 26 5c 12 c2 63 d2 01
czytane od końca
01 d2 63 c2 12 5c 26 80
i przekonwertowaniu na longa daje ilość ticków od daty 1601-01-01 00:00, a nie od daty 1700-01-01 00:00
Dzięki Mały za podpowiedź do nakierowania na rozwiązanie.
Temat zamykam. Problem rozwiązany

1 użytkowników online, w tym zalogowanych: 0, gości: 1