Hallo, ich werde wohl bald vor der Aufgabe stehen, in einem C-Programm eine bestimmte Speicheradresse lesen bzw. beschreiben zu müssen. Gibt es da eine Möglichkeit, einen Speicherbereich mit seiner Hex-Adresse anzusprechen, also quasi am Compiler/Linker vorbei? Oder muss ich auf Assembler zurückgreifen? Hintergrund ist, dass an dieser Stelle eine FPGA-Regelung einen Wert ablegt.
Generell geht das seit anno 62 in C: int *adresse = 0x1234; int wert = *adresse; Aber ob das auf deinem Mikro auch so ist, sagt mir meine Kristallkugel nicht. Oliver
oliver: Das hängt eher von seinem Compiler ab als von seinem "Mikro". Aber meine Kristallkugel sagt mit 99,9 prozentiger Wahrscheinlichkeit sollte das klappen ;)
Was bewirkt denn der Code? int *adresse = 0x1234; int wert = *adresse; In wert steht dann der Inhalt von 0x1234?
Hallo, es geht auch ohne Zwischenvariable: Var=(*((volatile int *) adresse)); (*((volatile int *) adresse))=Var; MfG Mark
int *adresse = 0x1234; bewirkt beim GCC: "warning: initialization makes pointer from integer without a cast" wie macht ihr den cast denn?
>wie macht ihr den cast denn?
In C:
int *adresse = (int*) (0x1234);
In C++:
int *adresse = reinterpret_cast<int*>(0x1234);
MfG Mark
Warum einmal volatile int bei der direkten Variante, und bei der indirekten ohne volatile?
Weil ich das volatile da vergessen habe :-) Oliver
Hallo alle zusammen, Ich hab schon viele Forume durchgesucht aber nix gefunden über Speicheradressen lesen in C#, und hier hab ich was gefunden aber halt in C wie man die Speicheradresse lesen kann, nun ist die frage ob man das auch in C# so benutzen kann. Ich würde mich freuen wenn mir jemand sagen könnte wie man das machen könnte in C#. Ich finde das Forum hier auch bis jetzt das Beste wo ich gefunden habe, hat sehr viele nütztliche Post's. Und es gibt hier viele Leute wo echt viel ahnung haben von ihrem Fach, das freut mich besonders. Werde das so testen wie es hier weiter oben beschrieben ist: int *adresse = 0x1234; int wert = *adresse; Ob es in C# geht. Liebe grüsse von Sap
Sap wrote: > Hallo alle zusammen, > Ich hab schon viele Forume durchgesucht aber nix gefunden über > Speicheradressen lesen in C#, http://www.google.com Suchbegriff: "C# pointer" -> http://www.c-sharpcorner.com/UploadFile/rajeshvs/PointersInCSharp11112005051624AM/PointersInCSharp.aspx
Danke Karl für die schnelle antwort. Hab nun raus wie ich Speicheradresse lesen kann in C#. Hier was ich getestet habe, vielleicht kann es ja dann später irgend wem helfen: unsafe { // *i ist der Valor von der Speicheradresse // i ist die Speicheradresse int y = 7; // Speicheradresse ist: 69133040 int x = 4; // Speicheradresse ist: 69133036 int *i = (int*)69133036; // int* i = &x; zum sehn welche Speicheradresse x hat int aux = (int)*i; // ergebnis wäre 4 // int aux = (int)i; // ergebnis wäre Speicheradresse MessageBox.Show(aux.ToString()); } Die Speicheradresse kann verschieden sein bei jedem.
entweder verstehe ich das falsch, oder die antworten sind alle nicht auf die überschrifft bezogen er fragt ja auch, wie er einen wert an eine bestimmte Adresse schreiben kann. Würde mich nämlich auch interessieren, wie das geht ;-) MfG Patrick
Patrick S. schrieb: > entweder verstehe ich das falsch, oder die antworten sind alle nicht auf > die überschrifft bezogen Du verstehst das dann falsch. Bis auf die letzten 3 (die das ganez unter C# behandeln) sind alle Antworten 'on topic' > er fragt ja auch, wie er einen wert an eine bestimmte Adresse schreiben > kann. > > Würde mich nämlich auch interessieren, wie das geht ;-) Du nimmst die Adresse als Zahl, castest sie in einen Pointer um und greifst über den Pointer zu.
Hallo zusammen, bei mir funktioniert folgendes: int *iAddress = reinterpret_cast<int*>(0x1234); aber mit float funktioniert es nicht: float *fAddress = reinterpret_cast<float*>(0x1234); Hat jemand eine idee?
Was heißt "funktioniert nicht"? Was heißt "hier"? (Bitte keine Antworten in der Art "in Düsseldorf", sondern eher auf welchem System, Prozessor, Betriebssystem, Compiler, ...)
Danke für die Antwort! Error ist folgender: Invalid Cast from type 'float' to type 'float*', programmiert hab ich es mit dem QT Creator , compiler: mingw, Betriebssystem: Windows XP
Bash_s schrieb: > Danke für die Antwort! > > Error ist folgender: Invalid Cast from type 'float' to type 'float*', ***** ****** Irgendwo hast du in deinem richtigen Code den Pointer-* vergessen.
Ok, was ich geschrieben hab stimmt so nicht, die von mir oben genannten beispiele funktionieren, den fehler bekomme ich nur bei folgender Zeile: float *fAddress = reinterpret_cast<float*>(sAddress.toFloat()); int *iAddress = reinterpret_cast<int*>(sAddress.toInt()); <-- wird richtig compiliert sAddress ist ein QString.
Sicher, dass .toFloat() einen float* zurückgibt und keinen float?
Bash_s schrieb: > Ok, was ich geschrieben hab stimmt so nicht, die von mir oben genannten > beispiele funktionieren, den fehler bekomme ich nur bei folgender Zeile: > > float *fAddress = reinterpret_cast<float*>(sAddress.toFloat()); toFloat() liefert einen float? Na ja, was erwartest du, wie soll man aus einem Float (warum eigentlicgh float?) eine Adresse machen? Welches ist denn das 2.5 te Byte? Ich denke du machst einen Fehler. Im Speicher liegt an dieser Adresse ein float. Aber deswegen ist ja die Adresse selber kein float! Eine Adresse ist immer eine ganze Zahl. Du musst unterscheiden zwischen der Adresse selber und dem was unter dieser Adresse im Speicher zu finden ist. Das eine hat mit dem anderen insofern nix zu tun, als eine Adresse einfach nur eine ganze Zahl ist. Wenn ich dann diese Zahl hernehme und mir die Bytes von dieser Speicheradresse hole, dann kann ich mit diesen Bytes einen float bilden. Aber deswegen ist ja eine Adresse kein float.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.