Hexdezimale Werte auslesen und übergeben

Von: , Frage gestellt am Mi, 4. Jun 2008

Hallo liebe Gemeinde,

ich würde gerne eine kleine Applikation schreiben, mit der ich Dateien
zum Eprom brennen erstellen und oder verändern kann.
Die Dateien sind 128kb groß und ich würde gerne jede beliebige Adresse aufufen, den Wert in Hex auslesen, verändern und zurückschreiben können.
Binär ist sowas ja aureichend dokumentiert aber die Adressierung der einzelnen Bytes in Hex macht mir noch Kopfzebrechen als Anfänger.

Vielen lieben Dank schonmal für eure Hilfe!
Michel

15 Antworten zu dieser Frage

  1. Antwort von nach 14 Minuten 0 hilfreich
    Re: Hexdezimale Werte auslesen und übergeben

    Hallo, ich würde gerne eine kleine Applikation schreiben, mit der ich
    Dateien
    zum Eprom brennen erstellen und oder verändern kann.
    Die Dateien sind 128kb groß und ich würde gerne jede beliebige
    Adresse aufufen, den Wert in Hex auslesen, verändern und
    zurückschreiben können.
    Binär ist sowas ja aureichend dokumentiert aber die
    Adressierung der einzelnen Bytes in Hex macht mir noch
    Kopfzebrechen als Anfänger.
    Du musst die Bytes ja nicht hexadezimal adressieren, wenn Du damit nicht zurecht kommst. Es ist doch völlig egal, in welchem Zahlensystem Du zählst, die Reihenfolge der Bytes bleibt die Selbe.

    &h0A ist dezimal 10. Wenn Du die Adresse als &h0A ansprichst, bleibt das trotzdem das zehnte Byte.

    Das gilt auch für due Bearbeitung der Bytes. Ob Du den Inhalt eines Bytes als &hFF oder als 255 oder als '11111111' anzeigst, ist völlig egal, der Inhalt bleibt der Selbe, das sind nur veschiedene Schreibweisen. Nimm die, die Dir am übersichtlichsten erscheint.

    Zum Verändern:

    Bei der Größe kannst Du noch gut die ganze Datei mit Get() in ein Array laden, die Inhalte der Felder im Array anzeigen, bearbeiten und das Array mit Put() zurückschreiben.

    Gruß Rainer

    PS. Sorry. :-( Ich habe erst den Beitrag geschrieben und dann nach dem Namen gesehen. Vergiß die Frage nach der Programmiersprache einfach wieder. :-)

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: Hexdezimale Werte auslesen und übergeben

      Hallo Rainer,

      vielen Dank erstmal wieder für Deine Turbo Antwort! Du hast Recht, ich hab vergessen zu erwähnen es sich um VB6 handelt. Sorry!

      Das ganze Hexadezimal zu belassen wäre mir schon am liebsten, da ich bisher mit einem Hex Editor diese Dateien bearbeite / schreibe. Das gilt sowohl für die Adressierung als auch für die Inhalte. Mein Problem ist nur, wie sage ich VB6, springe z.B. zum 28. Byte (&h1C) übergib mir den Inhalt in Hex und schreibe meinen Inhalt in Hex aufs 28. Byte wieder zurück! Toll wäre auch, wenn ich die kompletten 128kb ohne Resourcendatei direkt im Code verwenden könnte, z.B. als großer String. Gibt es brauchbare Tutorials die dieses ganze Thema vernünftig abhandeln?

      Vielen Dank nochmals und besten Gruß!
      Michel

      • Antwort von nach einer Stunde 0 hilfreich
        Re^3: Hexdezimale Werte auslesen und übergeben

        Hallo Michael, Das ganze Hexadezimal zu belassen wäre mir schon am liebsten,
        da ich bisher mit einem Hex Editor diese Dateien bearbeite /
        schreibe.
        OK. Das gilt sowohl für die Adressierung als auch für
        die Inhalte. Mein Problem ist nur, wie sage ich VB6, springe
        z.B. zum 28. Byte (&h1C) übergib mir den Inhalt in Hex und
        schreibe meinen Inhalt in Hex aufs 28. Byte wieder zurück!
        Mal für ein Byte, ohne VB extra zu öffnen:

        txt = "Test"
        Text1.Text = Hex(Asc(Mid(Text1.Text, Val("&h01"), 1)))
        Mid(txt, Val("&h01"), 1) = Val("&h"+Text1.Text)
        
        Toll wäre auch, wenn ich die kompletten 128kb ohne
        Resourcendatei direkt im Code verwenden könnte, z.B. als
        großer String.
        Hmmmm, so funktioniert doch laden immer?

        Dim Txt As String, ff As Integer, l As Long, DateiName As String
        DateiName = "C:\Test.txt"
        l = FileLen(DateiName)
        ff = FreeFile
        Txt = Space(l)
        Open DateiName For Binary As #ff
             Get #ff, , Txt
        Close #ff
        
        Gibt es brauchbare Tutorials die dieses ganze
        Thema vernünftig abhandeln?
        Nö, das ist zu einfach, um dazu extra ein Tutorial zu schreiben.

        Gruß Rainer

        • Antwort von nach 3 Stunden 0 hilfreich
          Re^4: Hexdezimale Werte auslesen und übergeben

          Vielen Dank Rainer,

          Du hast vermutlich Recht, evtl sollte ich einfach mal das ganze Thema gründlicher angehen... Vielleicht hast Du ja einen guten Buchtipp zum Lernen für mich! :) Toll wäre auch, wenn ich die kompletten 128kb ohne
          Resourcendatei direkt im Code verwenden könnte, z.B. als
          großer String.
          Hmmmm, so funktioniert doch laden immer?
          Ich meinte ohne zu laden also den ganzen Salat im Code fest als String zu verankern. z.B.

          Private Eprom as String
          Eprom = "EEFF 01F2 3A66....."

          Die Frage wie ich dort hinkomme aus dem Binary ein Hex Textstring zu wandeln, hast Du mir aber schon oben beantwortet! Vielen lieben Dank dafür!

          Besten Gruß und schönen Abend!
          Michel

          • Antwort von nach 4 Stunden 0 hilfreich
            Re^5: Hexdezimale Werte auslesen und übergeben

            Hallo Michael, Du hast vermutlich Recht, evtl sollte ich einfach mal das
            ganze Thema gründlicher angehen... Vielleicht hast Du ja einen
            guten Buchtipp zum Lernen für mich! :)
            nein, leider nicht.

            Mir haben Beispiele immer besser geholfen. Erst die, die VB6 selbst mitbringt, dann die auf http://www.ActiveVb.de und die Antworten hier. Toll wäre auch, wenn ich die kompletten 128kb ohne
            Resourcendatei direkt im Code verwenden könnte, z.B. als
            großer String.
            Hmmmm, so funktioniert doch laden immer?
            Ich meinte ohne zu laden also den ganzen Salat im Code fest
            als String zu verankern. z.B.

            Private Eprom as String
            Eprom = "EEFF 01F2 3A66....."

            ??? Das verstehe ich jetzt nicht. Du willst doch nicht 128k Daten im Quellcode unterbringen? Falls doch, ja, das kannst Du so ähnlich machen.

            Eprom = Chr(val("&hEE"))
            Eprom = Eprom + chr(val("&hFF"))

            Dann würde ich aber doch lieber in eine Datei entweder die Bytes selbst schreiben (das Assembler-Programm selbst) oder eben ...

            231
            255
            ...

            Die Daten zu laden ist viel flexibler und langsamer ist das auch nicht. Die Frage wie ich dort hinkomme aus dem Binary ein Hex
            Textstring zu wandeln, hast Du mir aber schon oben
            beantwortet! ...

            ... schönen Abend!
            Einen schönen Abend wünsche ich Dir auch.

            Gruß Rainer

            • Antwort von nach 6 Stunden 0 hilfreich
              Re^6: Hexdezimale Werte auslesen und übergeben

              Hallo ihr beiden,

              ich weiss net ob ich das richtig verstanden habe.

              Aber man kann die Daten ueber eine Ressource einbinden! Oder selbst wenn, ja nachdem wie gross die Werte werden koennen. Max. 255 oder grösser ?
              dann halt ein Array anlegen.
              Desweiteren würde ich Daten dann intern als Zahl verwalten!

              Ein kleines Demo veranschaulicht wie simple die ganze Sache ist. Dabei spielt es keine Rolle, wie gross der hex Wert ist

              Option Explicit
              Option Base 1
              
              Private myData As Variant
              
              Private Sub Form_Load()
               myData = Array(459, 128, 10, 65, 123, 296) 'Deine ganzen Werte 
               MsgBox ShowData
              End Sub
              
              'Zahl in HexCode wandeln
              Private Function NumberToHex(ByVal vRet As Variant) As String
               If IsNumeric(vRet) Then
                NumberToHex = Hex(vRet)
               Else
                NumberToHex = ""
               End If
               If Len(NumberToHex) Mod 2 > 0 Then NumberToHex = "0" & NumberToHex
              End Function
              
              'Hex Code in Zahl wandeln
              Private Function HexToNumber(vRet As String) As Variant
              Dim vData As Currency
               vData = CCur("&H" & vRet)
               HexToNumber = CVar(vData)
              End Function
              
              'Alle Daten im Hex Code anzeigen
              Private Function ShowData() As String
              Dim I As Long
              Dim vRet As String
              If IsArray(myData) Then
               For I = LBound(myData) To UBound(myData)
                vRet = vRet & NumberToHex(myData(I)) & " "
               Next I
               ShowData = Left(vRet, Len(vRet) - 1)
              Else
               ShowData = ""
              End If
              End Function
              



              Ps: Man kann es auch abwandeln, das das Array die Hex Werte aufnimmt.
              Zum Bearbeiten muss dann halt nur der entsprechende Wert im Array geaendert werden ;)

              MfG Alex

            • Antwort von nach 6 Stunden 0 hilfreich
              Re^7: Hexdezimale Werte auslesen und übergeben

              Hi Alex, ich weiss net ob ich das richtig verstanden habe.

              Aber man kann die Daten ueber eine Ressource einbinden! Oder
              selbst wenn, ja nachdem wie gross die Werte werden koennen.
              Max. 255 oder grösser ?
              255 denke ich, das sind ja Bytes, die in einen Eprom gebrannt werden sollen, ein Assembler-Programm vermutlich. dann halt ein Array anlegen.
              Desweiteren würde ich Daten dann intern als Zahl verwalten!
              Das würde ich auch, ist einfach bequemer und schneller. myData = Array(459, 128, 10, 65, 123, 296) 'Deine ganzen
              Werte
              Über 127000 Werte. Die würde ich auf gar keinen Fall in den Quellcode schreiben. Wie viele Seiten würden das? 20 Werte pro Zeile, 70 Zeilen pro Seite ... 90 A4 Seiten. Und bei jedem gefundenen Tippfehler den Quellcode ändern ...

              Gruß Rainer

            • Antwort von nach 7 Stunden 0 hilfreich
              Re^8: Hexdezimale Werte auslesen und übergeben

              Hallo Rainer, 255 denke ich, das sind ja Bytes, die in einen Eprom gebrannt
              werden sollen, ein Assembler-Programm vermutlich.
              Stimmt. Aber da kann man aus dem Variant ein Byte machen ;) dann halt ein Array anlegen.
              Desweiteren würde ich Daten dann intern als Zahl verwalten!
              Das würde ich auch, ist einfach bequemer und schneller.

              Da sind wir uns ja einig :) myData = Array(459, 128, 10, 65, 123, 296) 'Deine ganzen
              Werte
              Über 127000 Werte. Die würde ich auf gar keinen Fall in den
              Quellcode schreiben. Wie viele Seiten würden das? 20 Werte pro
              Zeile, 70 Zeilen pro Seite ... 90 A4 Seiten. Und bei jedem
              gefundenen Tippfehler den Quellcode ändern ...

              Ok, das ist quatsch. Aber warum will er sie direkt in den Quellcode einbinden? Sicher damit er nicht die Datei jedesmal extern laden muss. Wenn er diese schon hat und dort stehen die Daten drinnen, so koennte man diese als Ressource einbinden. Beim Start dann einlesen, je nachde m wie das File aufgebaut ist, dann splitten und die Daten ab in ein Array schieben ;) Bei dieser Variante dann gleich als Byte(Zahl) speichern und fertig ist der Husten :) Gruß Rainer
              Gruß Alex

            • Antwort von nach 8 Stunden 0 hilfreich
              Re^9: Hexdezimale Werte auslesen und übergeben

              Hi Alex, Ok, das ist quatsch. Aber warum will er sie direkt in den
              Quellcode einbinden? Sicher damit er nicht die Datei jedesmal
              extern laden muss. Wenn er diese schon hat und dort stehen die
              Daten drinnen, so koennte man diese als Ressource einbinden.
              Beim Start dann einlesen, je nachde m wie das File aufgebaut
              ist, dann splitten und die Daten ab in ein Array schieben ;)
              Bei dieser Variante dann gleich als Byte(Zahl) speichern und
              fertig ist der Husten :)
              auch da sind wir uns einig. Ich weiß über das Projekt so viel wie Du. :-)

              Gruß Rainer



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!