EDIT Feld als Hex zeichen senden
-
Hallo,
hab folgendes Problem - hab ein EDIT Feld in dem ich z.B. "10" eingebe.
Jetzt will ich die 10 als HEX 10 an einen AnsiString anhängen.
Bei mir kommt aber dann immer A als Zeichen raus (HEX 41)
aber eben nicht 10 :-((Die umwandlung hab ich so gemacht :
AnsiString a = IntToHex(StrToInt(Edit1->Text),1);
Hoffe ihr könnt mir helfen ....
-
So wie ich das sehe, ist die Ausführung deines Codes völlig korrekt:
0=0,1=1,...,9=9,A=10,B=11,C=12,D=13,E=14,F=15.Du willst aber, dass deine Eingabe 10 schon als hex 10 gilt, demnach darfst du keine Umwandlung von int nach hex machen sondern einfach deine Eingabe an deinen string hängen. Vorher einfach nur die Eingabe prüfen (wie das funktioniert steht: http://www.c-plusplus.net/forum/viewtopic-var-t-is-108991.html), ob es sich um 0-F handelt und fertig.
cu Rainbow
-
Hi,
habbe mich vor kurzem auch mit Hex Eingaben beschäftigt bzw. gefragt.
Schau einfach mal hier.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-108535.htmlGruß
Alex
-
Naja irgendwie ist wohl eher mein Problem die Hex zahl in nen AnsiString zu bekommen.
Also ich will das am Ende des AnsiStrings die Hex Zahl angefügt wird und das dann über eine Socket verbindindung mit
AnsiString A = Edit1->Text; AnsiString B = Edit2->Text; // Hier soll das HEX Zeichen drin sein AnsiString C = A + B; ClientSocket1->Socket->SendText(C);
versenden. Doch es steht einfach nur schrott drin :-((
Hab auch schon probier mit
AnsiString B = "0x" + Edit2->Text; . . . AnsiString B = "\x" + Edit2->Text;
aber alles ohne Erfolg ....
-
Erklär bitte genauer, was du gern hättest vielleicht ein Beispeil: Was wird eingegeben und was steht im AnsiString.
Was heißt am Ende des AnsiString? Der AnsiString ist doch leer??
Zum Einfügen benutze die Funktion Insert();Gruß Alex
-
ok
also es gibt zwei Eingabefelder.
In dem einem sollen Sendedaten und in dem andern eine Endkennung eingegeben werden.
Die Endkennung soll z.B. zweimal das Zeichen 0x10 sein also soll in das Eingabefeld für die Endkennung eine "10" eingegeben werden.Die zwei Sachen sollen dann zusammengefügt werden also die Daten + Endkennung und dann per Socket Verbindung gesendet werden ...
-
OK ich hab ein kleines Programm ausprobiert debug doch mal und schau Dir an was in der AnsiString Varible drinsteht, ich glaub das müßte doch passen, ob es einen direkteren Weg gibt weiß ich grad nicht.
AnsiString f; int j; char buffer[10]; j=HexToBin(Edit1->Text.c_str(),buffer,10); f=buffer;
Den Buffer habe ich willkürlich gewählt.
Sag mir dann ob es geklappt hat oder Dir weitergeholfen hatGruß
Alex
PS: Nur Kleinbuchstaben verwenden
-
Also das hat mir sehr weiter geholfen und es funktioniert auch
Jetzt hab ich aber noch eine Verständnis frage.
Wenn ich folgendes mache :AnsiString f; int j; char buffer[10]; j=HexToBin(Edit1->Text.c_str(),buffer,10); f=buffer; AnsiString a = "DATEN"; AnsiString x = "ANHANG"; AnsiString s = a + f + f + x;
Dann werden auf einmal in f zusätzliche hex zeichen eingefügt.
Wenn ich dagegen es so mache:AnsiString f1; AnsiString f2; int j; char buffer[10]; j=HexToBin(Edit1->Text.c_str(),buffer,10); f1=buffer; f2=buffer; AnsiString a = "DATEN"; AnsiString x = "ANHANG"; AnsiString s = a + f1 + f2 + x;
dann funktioniert es - aber warum geht die erste version nicht ???
P.S. Bei mir funktioniert es auch mit Grossbuchstaben ;-))
-
Hi ich habe es gerade ausprobiert, bei mir funktionierte zuerst das obere und das untere nicht, also zufälliger Fehler.
->Debug die Funktion HexToBin schließt den buffer nicht mit dem Abschlußzeichen 0 ab.
Verbesserung :char buffer[10]={0};
Dann müßten beide Funktionen korrekt funktionieren.
Mir ist zusätzlich gerade noch aufgefallen, es funktioniert nur, wenn Du eine Gerade Anzahl Zeichen eingibst, ansonsten wird ein Zeichen ignoriert.
Kannst Du diese Feststellung bestätigen?Gruß
Alex
-
Ja ok so funktioniert das
Das mit den Zeichen ist bei mir das selbe wobei Hex zeichen ja eigentlich immer eine gerade stellenzahl haben.
Die anzahl der gewandelten Stellen was ja HexToBin zurück gibt passt auf jedenfall :-))Also nochmals besten Dank hat mir sehr geholfen !
-
Klar, haben Hex Zeichen immer eine gerade Anzahl, wobei ich zuerst erwartet habe das er z.B. 0xa als 0x0a interpretiert.
Freut mich sehr daß ich Dir helfen konnte. Und danke für die Rückmeldung.Gruß Alex
-
ja stimmt schon ich sollte das auch beachten fals wirklich mal jemand an stelle von 0a einfach a ins eingabefeld schreibt ;-))
-
Hallo liebe Programmiergemeinde,
dies ist zwar schon ein sehr alter Beitrag, aber ich bin zuversichtlich das ich hier jemanden finde der mir aus der Patsche helfen kann.
Die von mir zu lösende Aufgabe klingt eigentlich ähnlich, wie die Eröffnung von DRIVER26. Eigentlich möchte ich eine Datei - welche Binärdaten enthält - in einem Memofeld darstellen. Diese Daten sollen zum einen im Hex-Code dargestellt werden und zum anderen binär (die Daten liegen bspw. folgendermaßen vor: 0E F1...->00001110 11110001). Den ersten Teil konnte ich mit einem kleinen Umweg über einen AnsiString, einer Schleife und anschließender IntToHex-Funktion auch entsprechend im Memo darstellen. Jedoch beim zweiten Teil will es einfach nicht gelingen. Es werden einfach nur kryptische Zeichen dargestellt, aber eben keine Einsen und Nullen.
Den hier verwendeten Code habe ich nur mit folgender Zeile ergänzt:
Memo2->Text=Memo2->Text + f;
...und dieser im Netz gefundene Code stellt zwar klasse die Einsen dar, jedoch bekomme ich das cout nicht so umgesetzt, das ich es in einem Memofeld darstellen kann.
char buff[8]; //entsprechend ändern!! ifstream infile("status001.dat", ios::binary); while(!infile.eof()) { infile.getline(buff, sizeof(buff)); } vector < bitset<8> > b; for (int i=0; i<sizeof(buff); i++) b.push_back(buff[i]); for (int i=0; i<b.size(); i++) cout << b[i] << endl; getch();
Ich würde mich sehr über einen hilfreichen Tip freuen.
-
Mach doch bitte einen eigenen Thread auf.
-
@DocShoe danke für den Tip...habe ich getan -> http://www.c-plusplus.net/forum/310952