Hexwerte richtig Augeben lassen - bekomme nur kryptisches
-
Hallo Liebe Forumsnutzer,
habe leider folgendes Problem mit meinem Projekt:
char buf[8] = { 0 }; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; DWORD read =8; for(int i=0; i<read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); printf("%X\n", buf[i]); }Bekomme leider egal wie ich es mache, immer nur kryptische Zeichen und nie meine Werte, die ich vorher festgelegt habe.
Kann mir da vielleicht jemand helfen??Habe es auch versucht mit:
std::cout << std::hex << value << std::endl;Aber auch das half nichts.
Ich benutze Windows Visual C++ 6.
Danke
-
Sollte eigentlich tadellos funktionieren. Hat es einen Grund, weshalb Du noch VS 6 benutzt? Der Compiler ist hoffnungslos veraltet, und hat gerade was C++ betrifft Unmengen an Fehlern.
-
leider ist das Vorgabe, bzw. auf dem Rechner hab ich keine Rechte neue Sachen zu installieren oder dergleichen.
bekomme immer nur folgende Augaben: 0x0012f594"|1U|r||"
Diese Ausgabe bekomme ich bei den oben angegebenen Werten.
-
std::cout << std::hex << int(buf[0]) << std::endl;
-
Nukularfüsiker schrieb:
std::cout << std::hex << int(buf[0]) << std::endl;Ist jetzt auch nicht der riesen Unterschied zu
unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl;
-
Tachyon schrieb:
Nukularfüsiker schrieb:
std::cout << std::hex << int(buf[0]) << std::endl;Ist jetzt auch nicht der riesen Unterschied zu
unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl;Ähm ja. Hab den Ursprungscode nicht komplett gelesen.
Stimmt denn damit was nicht? Sieht für mich ok aus.
-
Nukularfüsiker schrieb:
[...]Stimmt denn damit was nicht? Sieht für mich ok aus.
Auch das sagte ich schon. Eigentlich sollte das funktionieren. Selbst mit VS 6.
@Matthias_: Ist das wirklich exakt der Code aus Deinem Programm?
Für mich sieht die Ausgabe stark nach einem Pointer aufchar*aus, bei dem die Nullterminierung fehlt.
-
Hier die Vorgeschichte dazu:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-269596.html
-
Tachyon schrieb:
Nukularfüsiker schrieb:
[...]Stimmt denn damit was nicht? Sieht für mich ok aus.
Auch das sagte ich schon.
Seufz, Entschuldigung. Bin blind heute.
-
Haben den ganzen Rest aus meiner "Vorgeschichte" rausgenommen um erstmal nur den Fehler zu korrigieren.
Habe den Code so komplett aus meinem Programm kopiert.
Ich verstehe das ja leider auch nicht

-
Matthias_ schrieb:
Haben den ganzen Rest aus meiner "Vorgeschichte" rausgenommen um erstmal nur den Fehler zu korrigieren.
Habe den Code so komplett aus meinem Programm kopiert.
Ich verstehe das ja leider auch nicht

Also es liegt nicht am VS 6. Den habe ich hier noch für alte Projekte, und mit dem geht es ganz wunderbar. Sowohl mit
printfals auch mitcout.Vielleicht passiert vorher was, mit dem Du Dir den Stack oder den Framepointer zerballerst, so dass die Ausgabefunktionen nicht mehr richtig funktionieren.
Probiere Deinen Code mal ohne alles Weitere in einer ansonsten leeren main-Funktion aus (also in einem neuen Projekt zum Testen).
@Nukularfüsiker: Passiert mal.
Ich schreibe dafür regelmäßig Halbwissen hin, und tue so, als wäre das der Weisheit letzter Schluss... 
-
Habe jetzt ein neues Projekt erstellt mit nur dem Text und bekomme im Debug Modus immernoch die selben Sachen angezeigt.
Liegt das am Debug Modus??
Wie bekomme ich denn sonst meine Werte in eine Textbox Kopiert?
-
Matthias_ schrieb:
Habe jetzt ein neues Projekt erstellt mit nur dem Text und bekomme im Debug Modus immernoch die selben Sachen angezeigt.
Liegt das am Debug Modus??
Wie bekomme ich denn sonst meine Werte in eine Textbox Kopiert?
Wie, jetzt "Textbox"? Von Textboxen war nirgends die Rede...
PS: Am Debug liegt es nicht...
PPS: Zeig nmal den Code Deines Testprojekts. Und zwar komplett, bitte.
-
Ja, von Textbox war bisher auch nie die rede.
Deshalb ja jetzt meine Frage, wie bekomme ich meine Ergebnisse in eine Textbox?
Vielleicht liegt ja auch der Fehler in der bisherigen Ausgabe.Danke aber an alle, die sich um diesen Fehler bemühen!!!
-
#include "stdafx.h" #include "neu.h" #include "neuDlg.h" #include <iostream> #include <iostream.h> void CNeuDlg::OnOK() { char buf[8] = { 0 }; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; DWORD read =8; for(int i=0; i<read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl; } }/edit pumuckl: cpp-tags
-
Matthias_ schrieb:
Danke aber an alle, die sich um diesen Fehler bemühen!!!
Du machst es uns nicht gerade einfach. Zeig doch mal ein (minimales aber compilierbares) Beispiel, welches den Fehler aufweist. Der bisherige Code zeigt nämlich keinen Fehler und deinen Angaben zufolge ist das aber gar nicht dein Code, sondern du machst etwas ganz anderes.
-
Ich möchte nur über eine Com Schnittstelle etwas auslesen.
Das ist der Hintergedanke.ZUVOR versuche ich mit diesem ersten Schritt zu schauen, ob ich mir irgendwie vernünftig HEX Werte anzeigen lassen kann.
Und dieser erste Schritt haut schon leider nicht hin.
Der Code den ich gepostet habe steht so in meinem Programm und im Moment nichts anderes.
Über einen "OK" Button wird das ausgeführt. Das war es auch schon! (OnOK())Aber im Dubug bekomme ich nur komische Werte. (wie ich vorher schon gepostet habe)
Kann ja auch gut sein, dass ich einfach einen dummen Fehler irgendwo gemacht habe oder ich auf diese Weise garnicht zur Ziel komme.....
THX Anyway
-
Betonung liegt auf compilierbar. Wenn man deinen Code von oben nämlich compilierbar macht, dann funktioniert das wunderbar. Da dein Code aber nicht compilierbar ist, hast du höchstwahrscheinlich an anderer Stelle noch mehr Code und dort könnte der Fehler liegen. Eine compilierbare Version deines Codes könnte zum Beispiel so aussehen:
#include <iostream> void OnOK() { char buf[8] = { 0 }; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; int read =8; for(int i=0; i<read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl; } } int main() { OnOK(); }Und jetzt sag mir, ob dieser Code bei dir den beschriebenen Fehler erzeugt. Höchstwahrscheinlich nicht (Falls doch, hast du ein wirklich übles Problem). Und das obwohl ich nichts entscheidendes geändert habe. Da siehst du, wie wichtig es ist, bei Fehlern ein komplettes Beispiel zu bringen.
-
Alles klar, habs verstanden, danke dir.
Hier also nochmal:
#include <iostream> void CNeuDlg::OnOK() { char buf[8] = { 0 }; buf[0]=0x11; buf[1]=0x31; buf[2]=0x55; buf[3]=0x03; buf[4]=0x72; buf[5]=0x14; buf[6]=0x13; buf[7]=0x30; DWORD read =8; for(int i=0; i<read; i++) { unsigned int value = static_cast<unsigned int>(buf[i]); std::cout << std::hex << value << std::endl; } } int main() { CNeuDlg::OnOK(); }Bekomme hier Fehler wie folgt:
error C2248: Kein Zugriff auf protected Element
-
Matthias_ schrieb:
Alles klar, habs verstanden
Nicht so richtig. Nimm doch bitte genau den Code von SeppJ, ohne etwas hinzuzufügen oder wegzulassen.