Schreibweise für Hex-Zahlen?

  • VB.NET

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

    Schreibweise für Hex-Zahlen?

    Hallo,
    ich habe folgendes Problem
    ich möchte mit der funktion Serialport1.write() zahlen an einen Pic schicken... der Pic versteht nur Hex zahlen.
    Folgende 8 Byte sollen an den Pic geschickt werden (in Hex) 44 FB E0 80 00 00 00 33
    jetzt könnte ich einfach die dazugehörigen ASCII zeichen suchen um dann einfach Serialport.wirte("D....0003") zu schreiben...
    aber FB E0 und 80 gibts im ASCII-Code ja nicht mehr wie mir scheint.
    gibt es einge Möglichheit die zahlen direkt dort in hex einzufügen oder muss ich die erst umrechnen irgendwie?

    mit freundlichen Grüßen
    Christoph
    @Obbedair:: So was:

    VB.NET-Quellcode

    1. Dim value = &H44
    2. MessageBox.Show(value.ToString("X2"))
    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!
    Die hexadezimale Schreibweise der Zahl 68 ist 44 bzw 0x44 bzw. als VB-Literal &H44.
    Wenn eine Integerzahl mit ToString() in einen String umgewandelt wird, bewirkt der optionale String-Parameter "X2", dass die Zahl in hexadezimaler Schreibweise (X) mit 2 Stellen ausgegeben wird. So wird aus der Zahl 44 (zur Basis 16) bzw. 68 (Basis 10) der String "44".

    Und jetzt erläuter du bitte nochmal genau, was eigentlich über die seriellen Schnittstelle an diese "Pic" gesendet werden muss.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    ich möchte PC und CAN-BUS miteinander verbinden.. Bedeutet... ich habe ein Programm in dem ich per Button (z.b "Licht-EIN") das licht im Zimmer anschalten möchte...
    wird der Button geklickt so schickt das Programm über die RS232 ein Frame (8Byte) zum Pic ... der übersetzt das Frame und schickt es auf den CAN-BUS zum nächsten PIC der dann die Lampe Steuert.
    diese 8Byte sind wie folgt aufgeteilt:

    1.Byte StartSignal (0x44)
    2.Byte (High_byte der Pic-Adresse im Bus-System)
    3.Byte (Low_Byte der Pic Adresse)
    4-7.Byte(Daten für den PIC(Lampe)
    8.Byte (StopSignal(0x33))
    FB E0 und 80 gibts im ASCII-Code ja nicht mehr wie mir scheint.

    … aber in der Ansi Codepage

    44 FB E0 80 00 00 00 33
    Serialport.write("D....0003")

    Wenn schon, dann so:

    Quellcode

    1. Serialport.write("Dûà€" & chr(0) & chr(0) & chr(0) & "3")


    oder

    Quellcode

    1. ChrW(&H44) & ChrW(&HFB) & ChrW(&HE0) & ChrW(&H80) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(&H33)

    (Bei Werten ab 80 Hex immer ChrW verwenden)!

    Wichtig: Encoding.Default

    … kommt dann 68 raus... zwischen den beiden zahlen finde ich da auch irgendwie noch kein zusammenhang

    Das ist schlecht (für einen Programmierer).
    Ganz einfach: 44 Hex (&H44) ist 68 Dez.

    … was das "x2" bedeutet?

    Teste das ohne, mit ("x2") und mit ("X2") bei value = 2, dann siehst du den Unterschied

    Übrigens, die Hexzahlen kannst du auch schwarz schreiben.
    Die müssen nicht weiß sein. :whistling:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eierlein“ ()

    Eierlein schrieb:

    Wenn schon, dann so:

    Serialport.write("Dûà€" & chr(0) & chr(0) & chr(0) & "3")

    oder

    ChrW(&H44) & ChrW(&HFB) & ChrW(&HE0) & ChrW(&H80) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(&H33)


    Hö? Encoding? ChrW? Wie umständlich...

    VB.NET-Quellcode

    1. Dim frame As Byte() = {&H44, &HFB, &HE0, &H80, 0, 0, 0, &H33}
    2. serialPort.Write(frame, 0, 8)
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Zumal Serialport.write("Dûà€" & chr(0) & chr(0) & chr(0) & "3") mit eingestelltem Encoding = Encoding.Default exakt dasselbe sendet wie mein Beispiel. Nur dass letzteres weniger umständlich ist und das Framework intern nicht ständig hin- und her-kodieren muss.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    @Obbedair:: Ich schließe mich da der Meinung von @Artentus: an, die Gegenstelle will Bytes sehen, keine Strings.
    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!