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
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.
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?
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!
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.
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!
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.
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
Ü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 …
Ü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
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.
Das ist aber lieb von euch, daß ihr mein Problemchen so durchkaut. Ich kann ja mal bissel Licht in die Idee bringen.
Generell bin ich gerade dabei ein Homecockpit für meinen Flugsimulator zu planen. Für das Flightmanagement Panel benötige ich das VB6 Programm als Entwicklungshilfe.
In dem Eprom stehen später nur Parameter dem jeweiligen Flugzeugtyp entsprechend. Diese Parameter muss ich jeweils „erarbeiten“ und dann eintragen. Im Moment mache ich das mit nem Hexeditor aber ich erhoffe mir eine deutliche Erleichterung der ganzen Angelegenheit, wenn ich mir ein spezifisches Programm zur Eingabe bastel.
Ich brauche eigentlich nur drei Textinput Boxen, in denen ich die Bytes dezimal direkt anspringen und hexadezimal verändern kann.
z.B.
[] [] [h]
Zudem muss ich die Bytes noch vertauscht schreiben
Also wird eingetragen als
Binär fällt damit schonmal aus, sonst raffe ich da gar nichts mehr.
Die Ressource ist natürlich besser, ich hatte die Dimension des Codes nicht wirklich überlegt (viele Dank Rainer!) Die Idee erschien mir nur praktischer direkt alles vor mir liegen zu haben. Als Anfänger ist es noch sehr abstrakt und unübersichtlich nur noch mit Array’s Varis und Zählern zu tun zu haben
Schönen Abend euch Beiden und Danke nochmals!
Michael
Das ist aber lieb von euch, daß ihr mein Problemchen so
durchkaut.
das machen wir öfter so, das hilft oft, die optimale Lösung zu finden, Brainstorming halt.
Binär fällt damit schonmal aus, sonst raffe ich da gar nichts
mehr.
Noch mal:
Die Bytes werden immer in der selben form gespeichert, was Du wie anzeigst ist ein anderes Thema, da bist Du frei.
Bei der Verwaltung der Bytes kannst Du die entweder in einem String unterbringen, als ASCII-Zeichen, oder auch in einem Bytearray. Die Daten sind die selben, der Unterschied liegt in der Verarbeitungsgeschwindigkeit, das Array ist sehr viel schneller.
Die Ressource ist natürlich besser, ich hatte die Dimension
des Codes nicht wirklich überlegt (viele Dank Rainer!) Die
Idee erschien mir nur praktischer direkt alles vor mir liegen
zu haben. Als Anfänger ist es noch sehr abstrakt und
unübersichtlich nur noch mit Array’s Varis und Zählern zu tun
zu haben
Schönen Abend euch Beiden und Danke nochmals!
Dir auch einen schönen Abend.
Wenn Du noch Fragen dazu hast, immer her damit.
Den Vollständigen Code für einen Hexeditor möchte ich jetzt nicht schreiben und hier posten, das hilft Dir ja nicht beim Verständnis, dann kannst Du auch den fertigen Hexeditor verwenden. Aber über Fragen zu Details würde ich mich freuen.
Ich haenge immernoch an Joe seinen Problem und trete immer auf einer Stelle rum
Irgendwie komme ich immer nen Stueck weiter und falle dann wieder 2 zurueck
*gg* doch! Ich habe gar nicht mitbekommen, daß Du Hilfe brauchst.
Ich haenge immernoch an Joe seinen Problem und trete immer auf
einer Stelle rum
Irgendwie komme ich immer nen Stueck weiter und falle dann
wieder 2 zurueck
Obs an der Hitze liegt?
Keine Ahnung.
Das Projekt schien mir inzwischen zu groß für meinen kleinen Kopf. Wenn Du schon hängst … Kannst Du mir das Projekt im Stück zukommen lassen und das Problem kurz schildern? Dann lege ich eine Nachtschicht ein. Die Puzzelteile zusammen suchen mag ich jetzt nicht.
Ist aber in VB5 getippselt. Also muesstest du gewisse Function entfernen. Ansonsten schau dir mal den Source an. Er ist simple gehalten und leicht zu verstehen. Die ServerAnwendung passt da schon. Am Clienten bin ich noch dabei Ich sende dir mal den Server heute Abend zu. Schaue ihn dir mal an, so das du siehst, wie er fungiert. Falls du fragen hast, so frage einfach. Danach lasse ich dir den Clienten zukommen
Ansonsten schau dir mal den Source an. Er ist
simple gehalten und leicht zu verstehen. Die ServerAnwendung
passt da schon. Am Clienten bin ich noch dabei Ich sende
dir mal den Server heute Abend zu. Schaue ihn dir mal an, so
das du siehst, wie er fungiert. Falls du fragen hast, so frage
einfach. Danach lasse ich dir den Clienten zukommen