Variablen Inhalt rausfinden
-
Ich habe schon versucht mit cout << var << endl;
die Ausgabe zu machen aber da kommen wie gesagt nur die komischen Zeichen. Was bewirkt das (int) davor?Und debugger weíß ich leider nicht genau wie ich es nutzen soll. Da ich alles per Konsole mache und das Programm dann mit "make" erstelle.
-
uchar und nicht uchar*? Bist du dir da ganz sicher?
Was bewirkt das (int) davor?
es castet den Wert in ein int. Dann wird eine Zahl ausgegeben. Wenn du uchar direkt ausgibst, wird das Terminal das Zeichen anhand des aktuellen Zeichensatz interpretieren. Daher die komischen Zeichen.
Und debugger weíß ich leider nicht genau wie ich es nutzen soll. Da ich alles per Konsole mache und das Programm dann mit "make" erstelle.
Naja, du kannst entweder ein grafisches Frontend für den gdb nehmen (wie kdbg oder M-x debug oder Insight) oder gdb direkt benutzen.
-
Also die Zuweisung sieht in etwa so aus.
Es gibt ein Struct mit der Variablen:
uchar test[16];
Diese wird dann im Programm mit Daten gefüllt. Und dann an einer Stelle einer anderen Zugewiesen.
uchar *buf;
memmove(buf+20+16, buf+20+buf[1], 0x34);
buf[0]++;
buf[1]=16;
memcpy(buf+20, struct->test, buf[1]);Wenn ich hier versuche mit cout << struct-> test << endl; oder mit buf auszugeben kommen die komischen Zeichen.
Aber ich werde es mal mit dem (int) davor versuchen.
-
Also ich habe es nun mit (int) ausprobiert und es kommen immer noch komische Zeichen.
Allerdings muss ich für die Ausgabe eine Funktion benutzen die bereits im Programm eingebaut ist da ich das "cout" nicht einbinden kann.
Es existiert eine Datei wo sich alle Includes befinden. Wie z.b. stdio, stdlib usw.
Aber wenn ich dann da #include <iostream.h> einfüge erhalte ich beim make die Fehlermeldung: "error: iostream.h: Datei oder Verzeichnis nicht gefunden"Wenn ich in einem eigenen kleinen Programm einfach eine cout Ausgabe mache funktioniert es mit der Headerdatei.
Ich weiß jetzt nicht ob es bei der falschen Ausgabe daran liegt das ich nicht das cout benutze oder ob die noch in irgendeinem anderen Format sind.
-
Dann sag doch gleich, dass du uchar[16] oder uchar* hast. Das ist nämlich überhaupt gar nicht äquivalent zu uchar!
Es existiert eine Datei wo sich alle Includes befinden. Wie z.b. stdio, stdlib usw.
Das hört sich nach schlechtem Design an. Normalerweise sollte man nur includieren, was man wirklich benötigt!
Und C und C++ wild zu mixen ist auch keine gute Idee imho.
Aber wenn ich dann da #include <iostream.h> einfüge erhalte ich beim make die Fehlermeldung: "error: iostream.h: Datei oder Verzeichnis nicht gefunden"
iostream.h gibt es nicht mehr. Der Header stammt ist seit über 10 Jahren obsolete und heißt seit 1997 einfach iostream.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ
Ich weiß jetzt nicht ob es bei der falschen Ausgabe daran liegt das ich nicht das cout benutze oder ob die noch in irgendeinem anderen Format sind.
Wie machst du denn die Ausgabe?
folgendes würde sich zB anbieten. Dann bekommst du die Bytes in Hex-Darstellung.
for(std::size_t i = 0; i != length; ++i) { std::cout << std::hex << static_cast<unsigned>(i); } std::cout << std::endl;
Alternativ kannst du auch ausgeben wie bisher und die Ausgabe durch einen Hexviewer leiten.
-
Ok erstmal vielen Dank für deine Hilfe.
Allerdings habe ich es noch nicht hingekriegt.
Und zwar auch wenn ich die Headerdatei so einfüge erhatlte ich die Fehlermeldung
#include <iostream>
Die Ausgabe folgt über eine bereits eingebaute Funktion. Ich habe das gerade die Funktion etwas verfolgt und es scheint mit einem sprintf zu arbeiten.
Aber da bin ich mir nicht ganz sicher da es sehr umfangreich und sehr verschachtelt ist.
Deßhalb würde ich gerne erstmal eine eigene Ausgabe einbauen da es erstmal einfacher ist.
Also das besteht das Problem das ich erstmal die Headerdatei nicht einbinden kann (wie gesagt in einem anderen kleinen Programm wo nur die Ausgabe gemacht wird funktioniert es mit der Headerdatei).
Und dann habe ich bei deinem Beispiel irgendwie nicht verstanden wo die Variable die Ausgegeben werden soll steht.Grüße
-
Hi,
also hat sich erledigt. Ich hab nun das mit printf gelöst da es ja auch bereits verwendet wird.
Danke für eure Hilfe.
Gruß
-
Also erst sagst Du Du hast es mit cout schon versucht, dann sagst Du dass Du cout nicht verwenden kannst. Könnte es sein dass Du einfach kein C++ sondern C machst?
-
Mal eine andere Frage.
Kann mir jemand sagen wie ich eine char Variable oder besser gesagt den Wert in Hex umwandeln kann?
Also ich lese einen String aus einer Datei mit fgets. Dann steht in der Variablen z.b. AB123AB123
Es ist eine char[16] Variable aber ich kann alles benutzen um das zu realisieren.Jetzt möchte ich immer 2 Zeichen der uchar[16] Variablen zuweisen also irgendwie so:
uchar test[16];
test[0]=0xAB;
test[1]=0x12;usw.
Falls es umständlich ist könnte ich auch in der Textdatei den Text verändern. Also statt alles hintereinander immer 2 in einer Zeile.
Wäre euch sehr dankbar wenn mir jemand einen Tipp geben könnte.
-
printf("%x", var[i]);