Führende Nullen bei Hex-Zahlen im Visual Studio CodeEditor

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Gregor Jasinski.

    Führende Nullen bei Hex-Zahlen im Visual Studio CodeEditor

    Hallo zusammen,
    erst mal allen noch ein gutes, gesundes und erfolgreiches Jahr 2023. Und viele, viele Codezeilen ;)

    Ich bin von einer anderen Programmiersprache und IDE auf VB dot Net umgestiegen. Ich programmiere gerade eine "technische" Anwendung, bei
    der im Code ziemlich viel mit Bitmasken usw. gearbeitet wird.

    Was mit nicht gefällt, ist das der Visual Studio Editor bei Hex-Zahlen im Sourcecode führede Nullen wegnimmt. Kann man das abschalten?

    clsHAL_PG_BTR.SetOutputBits_on_off(clsHAL_PG_BTR.PCF2BaseAdress, &HF, 1) 'set bits (0x0F) of Port to "1" (set to Input / Outputs "1")
    soll so aussehen
    clsHAL_PG_BTR.SetOutputBits_on_off(clsHAL_PG_BTR.PCF2BaseAdress, &H0F, 1) 'set bits (0x0F) of Port to "1" (set to Input / Outputs "1")

    Klar kann man führenee Nullen weglassen. Aber für mich zeigt diese Schreibweise an, das es sich bei dem "Zielobject" um eine Byte handelt(zB: ein 8 Bit IO-Port). Würde ich zB: an
    eine Routine das Word "0x00AA" senden, so würde ich schreiben "&H00AA" und der Visual Editor würde mir wieder draus "&HAA" machen. Und somit ist die Info "16 Bit wieder weg"

    Gruß C64User
    @C64User Willkommen im Forum. :thumbup:
    Die anderen hatten einen ZX81. ;)
    Ein Hexadezimalstring ist nur eine String-Repräsentation eines ganzzahligen numerischen Wertes,
    die Information "16 Bit" wird durch die Deklaration der aufgerufenen Prozedur bereitgestellt,
    sie ist auch dann vorhanden wenn da einfach eine 0 steht.
    Mit ist keine Einstellung bekannt, die die Anzahl führender Nullen bei Hex-Zeichen im Quellcode vorgibt.
    ====
    Im Quelltext kannst Du die Anzahl der an der GUI auszugebenden Hex-Stellen so festlegen:

    VB.NET-Quellcode

    1. Label1.Text = 42.ToString("X8")

    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!
    Seit VS2017 kann man das Unterstrichzeichen (_) als Gruppentrennzeichen verwenden. Damit bleiben die Nullen bestehen.
    Wo und wie viel du das Gruppentrennzeichen verwendest ist dabei fast egal
    Typzeichen (Visual Basic)- Hexadezimal-, Binär- und Oktalliterale

    VB.NET-Quellcode

    1. Dim test1 As Byte = &H_00FF
    2. Dim test2 As Byte = &H00_FF
    3. Dim test3 As Byte = &H_0_0_F_F

    C64User schrieb:

    Und somit ist die Info "16 Bit wieder weg"
    Ist das tatsächlich ein Problem?
    Notfalls gibt es einen Zeilenkommentar, wenn dir das so wichtig ist.

    Von hinten durch die Brust ins Auge:

    VB.NET-Quellcode

    1. val = int16.Parse("00AA", NumberStyles.HexNumber)
    2. val = int8.Parse("0F", NumberStyles.HexNumber)


    Edit: Die Methode von @HenryV ist besser.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo zusammen,
    vielen Dank für eure Antworten. Bin leider nicht eher zum Antworten gekommen.

    Die Antwort die ich gesucht habe ist die von Henry_V. => Byte = &H_00FF
    Leider kann ich diese noch nicht nutzen, die wir dazu unsere Visual Studio updaten müssen.

    Label1.Text = 42.ToString("X8") => Das bezieht sich nur auf die GUI und nicht auf den Code ....

    Ist das tatsächlich ein Problem? Notfalls gibt es einen Zeilenkommentar, wenn dir das so wichtig ist.
    Alle meine Editoren von anderen Sprachen und aus der Embedded-Entwicklung ändern nicht einfach das was man eingegben hat.
    Ich glaube für jemand der Hardwarenah progerammiert sind solche schreibwesien im Code selbverständlich.

    Danke nochmal
    Gruß C64User

    C64User schrieb:

    Das bezieht sich nur auf die GUI und nicht auf den Code ....
    Genau das steht in Post #2.
    Was hindert Euch, das Studio upzugraden?
    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!

    C64User schrieb:

    Alle meine Editoren von anderen Sprachen und aus der Embedded-Entwicklung ändern nicht einfach das was man eingegben hat.
    Mein VW Käfer aus den Siebzigern hat auch nichts von alleine geändert.
    Da blieb der Gang drin, den ich eingelegt hatte. Und der Scheibenwischer blieb, wie ich ihn einstellte.
    Mein jetziges Auto legt automatisch die richtigen Gänge ein und wenn's regnet, schaltet sich der Scheibenwischer automatisch ein.
    Ich ziehe die modernere Variante vor, auch wenn ich mich vielleicht manchmal etwas umgewöhnen musste.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Die Unterstrichmethode scheint auch bei binärer Schreibweise einer Zahl zu funktionieren, also etwas mit &B, was wiederum ich manchmal brauche, wenn ich z.B. für ein kleines Embeddedsystem so etwas wie einen Zeichensatz oder Decoder für 7-Segment-LED Zeile für Zeile selbst definieren/schreiben muss – wenn es im Quelltext richtig untereinander steht, macht es sich leichter, die Zeichen direkt im Quelltext zu entwerfen und vor allem – man kann das gebaute Zeichen aus Einsen und Nullen sofort (und auch später) im Text erkennen, um ggfs. kleine oder auch große Änderungen vorzunehmen, was bei versetzten Zeilen nicht mehr so trivial ist. Wenn der Editor die führenden Nullen wegmacht, entsteht rein optisch ein „Salat”, mit dem ein Mensch nur mühsam etwas anfangen kann, auch wenn sich an den Werten nichts geändert hat. In C# wird der Quellcode an dieser Stelle vom Editor nicht angetastet, die führenden Nullen bleiben stehen, es wird natürlich auch anders – mit 0x und 0b – geschrieben. Ab welcher Edition das in Visual Studio verfügbar ist, weiß ich nicht, mit VS2019 und VS2022 geht es auf jeden Fall – einfach mal die neueste, kostenfreie CommunityEdition installieren und ausprobieren. Mit dem letzten .ToString("D5")-Beispiel kann man wiederum das Anzeigen der führenden Nullen im Label selbst bzw. das Formatieren des Strings, der beim Konvertieren entsteht, bestimmen/erzwingen – es gibt noch andere Schreibweisen; das nur so nebenbei erwähnt, denn darum geht es in diesem Thema nicht.

    VB.NET-Quellcode

    1. Dim ByteHex As Byte = &H_00FF 'Hexadezimale Schreibweise für 255 als Byte
    2. Dim Word1 As UInt16 = &H_00FF 'Hexadezimale Schreibweise für 255 als 16-Bit Word
    3. Dim Word2 As UInt16 = &H_FFFF 'Hexadezimale Schreibweise für 65535 als 16-Bit Word
    4. Dim ByteBin As Byte = &B_00000101 'Binäre Schreibweise für 5
    5. Label1.Text = ByteHex.ToString
    6. Label2.Text = Word1.ToString
    7. Label3.Text = Word2.ToString
    8. Label4.Text = ByteBin.ToString
    9. (...)
    10. Label2.Text = Word1.ToString("D5")
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Gregor Jasinski“ ()