Bitstrom in Pakete mit je 8 Bit packen, aber wie?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Bitstrom in Pakete mit je 8 Bit packen, aber wie?

    Hallo Freunde

    ich habe einen Bitstrom mittels VB eingelesen der 2504 Zeichen lang ist. Nun hätte ich gerne dass dieser Strom in Pakete à 8 Bit aufgeteilt wird. Ich hab keine Ahnung wie ich das machen soll.

    Hat jemand einen Quellcode da um so etwas umzusetzen?

    Für jede HILFE bin ich euch dankbar!

    Lieber Gruß
    Peter
    Hast Du einen Quellcode, mit dem Du einen Bitstrom einlesen kannst?
    Wie sieht denn dieser Quellcode aus?
    Wie sehen Deine Zeichen aus?
    Wenn Du das postest, haben wir, denke ich, schnell eine Lösung gefunden.
    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!
    Das geht per Bitshift Operatoren 8 Bit sind ein Byte...

    VB.NET-Quellcode

    1. Dim b As Byte = (bit8 << 7) Or (bit7 << 6) Or (bit6 << 5) Or (bit5 << 4) Or (bit4 << 3) Or (bit3 << 2) Or (bit2 << 1) Or bit1

    Aber die Daten bekommst du normalerweiße sowieso in ByteForm, meinst du evtl. direkt umgekehrt?!, Also du hast die Bytes und möchtest diese in die 8 Bit Packete als String ausgeben?!

    VB.NET-Quellcode

    1. Dim str As String = byte.ToString(2)

    Bei einem Array einfach mit einer Schleife durchlaufen und noch ein Tab(oder sonstiges Trennzeichen) am Ende dazufügen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich bin leider schon zuhause, der Quellcode ist auf dem Uni-Rechner. Kann ihn erst morgen früh posten...

    ich hoffe dass morgen früh noch jemand hier rein schaut ^^

    kurze Erklärung, wir haben mit Excel eine Matrix erstellt und ein "Bild" damit gezeichnet. schwarz gefüllte Zellen werden als 1 und weiße Zellen als 0 gewertet. Alle Zellen werden ausgelesen und dann hab ich einen 2504 Zeichen langen Bitstrom: 1111000101010000001010 usw. Jetzt soll der Bitstrom einfach nur nach jeder 8. Stelle getrennt werden und danach in Dezimal umgewandelt werden. Das hab ich schon rausbekommen. Das einzige dass noch fehlt ist wie gesagt den ganzen Datenstrom in je 8bit bzw 7bit pakete zu packen. Bei der Übertragung per rs232 Schnittstelle kommen nur 7 bit korrekt an, ich denke das erste Bit ist das VorzeichenBit


    LG

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „StutzPeter“ ()

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Excel As Object
    3. Dim i, j As Integer
    4. Excel = CreateObject("Excel.Application")
    5. Excel.Visible = True
    6. Dim oWbk
    7. Datei = "C:\Dokumente und Einstellungen\Admin\Desktop\Profjektarbeit II\Macromappe.xlsm"
    8. oWbk = Excel.Workbooks.Open(Datei)
    9. For i = 24 To 1 Step -1
    10. For j = 176 To 1 Step -1
    11. wert = Excel.Cells(i, j).Value & wert
    12. Next j
    13. Next i
    14. TextBox1.Text = wert
    15. Excel = Nothing


    Hier ist mal der Quellcode um die einzelnen Zellen aus Excel auszulesen.
    Die Variable wert enthält nun den Bitstrom.

    LG
    Ich weiß nicht, wie Deine Excel-Liste aussieht. Eins fällt mir sofort auf:

    VB.NET-Quellcode

    1. For i = 24 To 1 Step -1
    2. For j = 176 To 1 Step -1
    3. wert = Excel.Cells(i, j).Value & wert
    4. Next j
    5. Next i
    ein klein Wenig umgruppieren:

    VB.NET-Quellcode

    1. For i = 24 To 1 Step -1
    2. Dim k As Integer = 176
    3. For j1 = 22 To 1 Step -1
    4. wert = ""
    5. For j2 = 1 To 8
    6. wert = Excel.Cells(i, k).Value & wert
    7. ' hier ggf. einen numerischen Wert aufbauen
    8. k -= 1
    9. Next
    10. ' hier wert sofort verarbeiten (oder den numerischen Wert)
    11. Next
    12. Next
    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!
    Hallo

    Vielen Dank für deine Hilfe, es funktioniert alles so wie es soll...


    Das einzige was nicht funktioniert ist über die rs232 schnittstelle einen 8 bit strom paket zu senden da er das erste bit als vorzeichen erkennt.
    wenn ich 11111111 rausschicke, kommt beim anderen PC 00111111 an. wenn ich ein 7 bit paket versende, zum beispiel 1111111, kommt auch 1111111 an. gibt es eine Möglichkeit das iwie zu übergehen damit auch ein ganzes byte korrekt übertragen wird?

    Lg Peter
    Das ist wohl kein Vorzeichen, sondern ein ASCII-Automatismus, weil Ur-ACII nur 7 Mit kennt.
    Sieh mal, ob Du dem Port eine Codepage zuordnen kannst - Default ist die vom Rechner oder Westeuropa.
    Diese muss dann auf beiden Seiten der Verbindung übereinstimmen.
    Sieh Dir die Eigenschaften von SerialPort an.
    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!