Stream nach bestimmter bytekette durchsuchen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Stream nach bestimmter bytekette durchsuchen

    Hey Leute,

    ich habe bisher keine möglichkeit gefunden aber vllt. könnt ihr mir ja helfen :)
    Also, ich müsste einen Stream nach einer bestimmten bytekette durchsuchen(also z.B. FF0012F5 blabla^^)


    wie kann ich das machen?

    gruß,
    Julian

    EDIT:

    Ich hab den Stream jetzt in ein ByteArray gepackt, wie kann ich nun dieses bytearray durchsuchen? IndexOf funzt nicht X(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    Du suchst nach &hFF. Wenn Du eins gefunden hast, testest Du, ob das nächste Byte &h00 ist usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kommt drauf an wie groß, dass der Stream ist aber gehen wir mal davon aus es ist ein Filestream mit doch einer ordentlichen Länge:
    • Immer etwa so 50000 Bytes lesen (ist variabel aber bitte nicht 10 bytes oder so)
    • Dann wie Rod schon sagt jedes Byte durchgehen.
    • Beim durchgehen beachten: Wenn dein Sync von mir aus 5 Bytes lang ist, musst du 5 Bytes hinten abziehen und den Stream auch immer um 5 Bytes zurücksetzen. Sprich effektiv liest du dann 50000 Bytes verarbeitest aber nur 49995 Bytes. Das hat folgenden Grund: Wenn bei den letzten 2 Bytes in deinem Puffer dein 5 Byte langer Sync anfängt wirst du ihn verpassen. Aber wie genau du das am besten löst kommst du schon selbst drauf. (hab vll. ein wenig dumm erklärt :P )

    Kleiner Tipp wenn es große Mengen sind, wäre c# eine gute Alternative, da du da mit unsafe große Performancesteigerungen erziehlen kannst.

    Ach ja hab grad noch IndexOf gelesen. Damit wirste nicht weiterkommen.
    Jedes Byte durchgehen und schauen ob &FF bzw 0xFF ist. Heißt so viel wie forschleife.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ok, thx, hab ne Funktion geschrieb die ich euch nicht enthalten möchte :D

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Sucht in einem Array nach dem vorkommen eines anderen Arrays
    3. ''' </summary>
    4. ''' <param name="SearchArray">Das zu durchsuchende Array</param>
    5. ''' <param name="FindArray">Das Array mit den Elementen die Gefunden werden sollen</param>
    6. ''' <returns>Gibt bei erfolg den index des Vorkommens zurück, andernfalls -1</returns>
    7. ''' <remarks></remarks>
    8. Public Function FindArrayInArray(ByVal SearchArray As Array, ByVal FindArray As Array) As Integer
    9. For i = 0 To SearchArray.Length - 1
    10. If SearchArray(i) = FindArray(0) Then
    11. Dim Found As Boolean = False
    12. For j = 0 To FindArray.Length - 1
    13. If (SearchArray(i + j) = FindArray(j)) Then
    14. Found = True
    15. Else
    16. Found = False
    17. Exit For
    18. End If
    19. Next
    20. If Found = True Then
    21. Return i
    22. End If
    23. End If
    24. Next
    25. Return -1
    26. End Function



    So benutzt man sie:

    VB.NET-Quellcode

    1. Dim sArray() = {&HFF, &H0, &H12, &HF5}
    2. Dim fArray() = {&H0, &H12}
    3. MsgBox(FindArrayInArray(sArray, fArray))


    gruß,
    Julian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    @Eierlein: Wir haben UniCode, d.h. 2 Byte pro Char.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!