EDIT Feld als Hex zeichen senden



  • 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 hat

    Gruß

    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


Anmelden zum Antworten