Announcement

Collapse
No announcement yet.

Hexzahlen in einen AnsiString schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hexzahlen in einen AnsiString schreiben

    Hallo,

    folgendes Problem:

    Ich habe in einem buffer 8 Hexzahlen stehen, also z.B.:
    0x96 0x65 0x00 0x11 0x3A 0xCB 0x1A

    ich schreibe diese nun in response, will dann die ersten 4 auslesen und
    sie dann aufteilen, weil Sie z.B. ein Datum o. ä. darstellen.

    Code:

    AnsiString tmp;

    response = GetInfoBuffer.front();

    tmp = response.data[0];
    tmp += ":";
    tmp += respose.data[1];
    tmp += ":";
    tmp += respose.data[2];
    tmp += ":";
    tmp += respose.data[3];

    EditSWDateTime->Text = tmp.c_str();

    Das funktioniert soweit auch ganz gut,

    also z. B.:

    tmp = 0x09; //Dez: 9
    tmp += ":";
    tmp += 0x0A; //dez: 10
    tmp += ":";
    tmp += 0x63; //dez: 99
    tmp += ":";
    tmp += 0x09;// dez: 9

    geht noch problemlos,

    wenn dann aber die 3. zahl einen 2 stelligen dezimalwert ergibt, bekomme ich beim Beenden des Programms eine Fehlermeldung. Allerdings wird zur Laufzeit dann schon das richtige angezeigt:

    Bsp.:

    tmp = 0x09; //Dez: 9
    tmp += ":";
    tmp += 0x0A; //dez: 10
    tmp += ":";
    tmp += 0x63; //dez: 99
    tmp += ":";
    tmp += 0x0A;// dez: 10

    hier bekomme ich eine Fehlermeldung:

    "Zugriffsverletzung bei adresse 004BBA0E in Modul 'Messsystem.exe'. Schreiben von Adresse 0000C1B9"

    Ab und zu kommt die Fehlermeldung auch schon direkt beim Drücken des "Auslesen" Buttons, manchmal auch erst beim Beenden des Programms.

    wäre euch für euere Hilfe Dankbar, denn ich weiß echt nicht mehr weiter

  • #2
    Abgesehen davon, das die Umwandlung
    EditSWDateTime->Text = tmp.c_str();
    mit c_str() unnötig ist, ist deine Zusammenstellung des Strings so fehlerhaft. Du nimmst direkt die Hexadezimalenwerte in den String auf. Also für 0x09 wird irgendein Steuerzeichen geschrieben. Das dürfte wohl zu dem Fehler führen
    Christian

    Comment


    • #3
      Hallo,

      ja das hab ich vergessen, auch mit der Umwandlung

      tmp = StrToInt(response.data[0]);

      besteht das gleiche Problem.

      Wie würde man sowas denn richtigerweise lösen?

      Comment


      • #4
        StrToInt??

        Du hast doch in data[0] wohl 1 Byte (int/char) liegen und keinen String?

        IntToStr könnte helfen

        Des Weiteren hast du doch data[0] nicht 0x09 stehen....eine Hex-Zeichenkette?
        Zuletzt editiert von Christian Marquardt; 20.09.2010, 13:07.
        Christian

        Comment

        Working...
        X