Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Hilfe bei 32bit Adressen Berechner

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.05.2011, 01:08 Uhr
CosmoCortney



Hallo,
habe vor einigen Tagen mit dem Programmieren mit Visual Studio C++ Express angefangen und mit Hilfe des Buches "Visual C++ 2010 - Der schnelle und einfache Einstieg in ie Windows-Programmierung".
Bin also noch Anfänger..
Nachdem ich die ersten drei Kapitel des Buches durchgearbeitet habe, wollte ich mal ein komplett selbstentworfenes Programm schreiben, da ich schon fast alles was ich für das Programm brauche in diesem Buch gelernt habe.
Allerdings steht nichts in dem Buch von dem Berechnen von Hexadezimalzahlen.
Also habe ich trotzdem mal angefangen das Programm zu erstellen.
Sprachauswahl funktioniert einwandfrei an dem Programm (benutze das Programm nur für mich selbst, habe nur aus Interesse die Sprachauswahl mit eingebaut).
Muss nur eine Kleinigkeit wissen, um den Rest schreiben zu können.


Also:
Zuerst solltet Ihr wissen, was das Programm genau machen soll, um sich vielleicht leichter ein Bild davon machen zu können.
Das Programm soll bestimmte Hexadezimalcodes, so wie diese, die man vorfindet wenn man den RAM einer Spielekonsole oder eines Computers scannt. Diese Codes haben wie z.B. bei Nintendo GameCube oder Wii eine 32bit-Adresse und dahinter einen 32bit-Code (jeweils angegeben in 8 Hexadezimalstellen).

Die Adresse eines Codes soll in die oben-links plazierte textBox (textBox1) eingetragen werden,
und in die danebenstehende textBox (textBox2) kommt der eigendliche Code.
Unter textBox1 kommt eine weitere textBox (textBox3) wo eine Art Ausgleichswert (Offset) (auch in Hexadezimal) für die Adresse eingegeben wird. Das selbe auch mit textBox4, die rechts neben textBox3 und unter textbox2 plaziert ist. In diese textBox wird wenn nötig (ich bezeichne es mal) "Subadresse" eingetragen, da sich dort die ersten vier Hexadezimalstellen befindet und sich auch wie Adressen verhalten (aber nicht immer befinden sich dort "Subadressen").
unter den textBoxen befindet sich eine weitere textBox (textBox6), in der die Zahl eingetragen wird, wie viele neue Codes in textBox5 ausgegeben werden sollen.
Das Ergebnis in textBox5 sollte dann so aussehen (Beispielcode: 08A7E561 03F44133
, Offset: 00000100 00000000, 5 Codes + Ursprungscode sollen gezählt werden) :

08A7E661 03F44133
08A7E761 03F44133
08A7E861 03F44133
08A7E961 03F44133
08A7EA61 03F44133
08A7EB61 03F44133


Wenn ich aber einen Code und den gewünschten Offset-Wert eingebe, bekomme ich Dezimalwerte raus. Der Quellcode (für die Addition) sieht nach etwa 6 Stunden langen Tüfteln und nachdem ich im Internet etwas nachgeforscht habe so aus:

String ^str1 = textBox1->Text;
int i1 = int::Parse(str1->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

String ^str2 = textBox2->Text;
int i2 = int::Parse(str2->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

String ^str3 = textBox3->Text;
int i3 = int::Parse(str3->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

String ^str4 = textBox4->Text;
int i4 = int::Parse(str4->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

int i5 = i1 + i3;
int i6 = i2 + i4;
textBox5->Text = i5 + " " + i6; // + " " soll die Lücke zwischen Adresse und Code einfügen
}




Ich müsste lediglich nur wissen, wie die Ausgabe in textBox5 in Hexadezimal angegeben werden kann.
Brauche das Programm echt dringend, da ich anschließend nicht mehr die Codes von Hand tippen muss und auch vom Windows Rechner unabhängig bin (ein kompletter code hat oft über 30 Zeilen)..


Danke schonmal im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2011, 02:59 Uhr
Lensflare



Hallo CosmoCortney

Einen String mit einer Hex Zahl kann man wie folgt parsen:


C++:
    std::stringstream ss;
    ss << "01AF";
    ss << std::setbase(16);

    int z;
    ss >> z;



Der umgekehrte Weg:

C++:
    std::stringstream ss;
    ss << std::setbase(16);
    ss << 1234;

    std::string hexString;
    ss >> hexString;



die notwendigen includes dafür sind:

C++:
#include <sstream>
#include <iomanip>


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 17.05.2011 um 03:48 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2011, 07:18 Uhr
Tommix



'Morgen,
was Du da programmierst ist nicht C++ sondern C++/CLI. Ich würde Dir dringenst abraten, damit Windows-Programme zu schreiben, obwohl gerade die C++ Express-Edition und die Literatur dazu dies suggerieren. Nimm konsequenterweise lieber gleich C#.
Zu Deiner Frage:

C++:
textBox5->Text = String::Format(L"{0:X8} {1:X8}", i5, i6);



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.05.2011, 20:00 Uhr
CosmoCortney



Danke für die schnellen Antworten!
Und die Ausgabe der Werte in Hexadezimal klappt einwandfrei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.05.2011, 21:42 Uhr
CosmoCortney



Guten Abend,
habe heute versucht den Schleifenzähler zu programmieren, habe gedacht das darüber was im dem Buch steht, aber dem war leider nicht so..
Kann ich nochmal um Hilfe bitten?
Der Quellcode, also die Stelle wo ich nicht weiter komme sieht nun so aus:


C++:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
String ^str1 = textBox1->Text;
  int i1 = int::Parse(str1->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

      String ^str2 = textBox2->Text;
      int i2 = int::Parse(str2->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

           String ^str3 = textBox3->Text;
           int i3 = int::Parse(str3->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

               String ^str4 = textBox4->Text;
               int i4 = int::Parse(str4->Substring(0),System::Globalization::NumberStyles::AllowHexSpecifier);

               int i5 = i1 + i3;
               int i6 = i2 + i4;

textBox5->Text = String::Format(L"{0:X8} {1:X8}", i5, i6);





Nun soll anhand des von Benutzer definierten Wert in textBox6 die Anzahl der zu auszurechnenden Ergebnisse bestimmt werden; wie in meinem ersten Beitrag bereits erklärt.

Wäre echt über jede Antwort froh


Bearbeitung:
cpp-Tags eingefügt

Dieser Post wurde am 21.05.2011 um 01:08 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.05.2011, 09:13 Uhr
Tommix



'Morgen,
ich sags noch mal: Mit C++/CLI bekommst Du weder einen vernünftigen Einstieg in die Windows-Programmierung, noch lernst Du C++. Was mir auch noch aufgefallen ist, das zur Zahleneingabe mit NumericUpDown ein weitaus geeigneteres Control als TextBox zur Verfügung steht.
Ansonsten ist mir nicht ganz klar, wo die Zahlen die Du ausgibst herkommen. Nehmen wir mal an, Du hast einen Member

C++:
private:
cli::array<System::String^>^ values;


und anzahl sei der numerischeWert von textBox6. Dann könntest Du die Werte in values ablegen und in textBox5 anzeigen (Multiline auf true setzen):

C++:
values = gcnew array<String^>(anzahl);

for (int i = 0; i < anzahl; ++i)
  values[i] = String::Format(L"{0:X8} {1:X8}", ... was auch immer);

textBox6->Lines = values;



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: