AnsiString und Ascii



  • Hallo,

    ich habe ein char-Array

    [unsigned char v_buf[4];]

    lese darin Zeichen ein und möchte nun z.B. wenn ich vier Zeichen drin habe, diese als Ascii-Zeichen in ein AnsiString umschreiben. Der AnsiString soll also vier Ascii-Zeichen beinhalten.

    Tschö mit ö



  • wieso nimmst du ein unsigned char?

    machs doch so:

    char v_buf[4];
    strcpy(v_buf,"abcd");
    AnsiString str = v_buf;
    

  • Mod

    Hallo

    Vorsicht 😮 😞 😡
    (char v_buf[4])

    char v_buf[4]; 
    strcpy(v_buf,"abcd"); 
    AnsiString str = v_buf;
    

    MfG
    Klaus



  • KlausB:
    Du wolltest v_buf[5] schreiben, oder?



  • Janzen:
    du meinst Jester2000 nicht KalusB, oder..



  • Naja, implizit meine ich alle, die v_buf[4] geschrieben haben. 🙂
    Konkret aber KlausB, weil ich vermute(te), dass er auf genau diesen Fehler hinweisen wollte. Ansonsten würde sein Beitrag ja keinen rechten Sinn ergeben. 😉



  • ups, türlich muss da ne 5 stehen, mein fehler 😃



  • Hallo,

    ich bin nicht ganz zufrieden mit dieser Lösung, ich habe es jetzt so gemacht:

    [
    unsigned char v_read_buf[80]; //muss größer sein
    char p[4];

    p[0] = v_read_buf[2]; //wird deshalb um gespeichert
    p[1] = v_read_buf[3];
    p[2] = v_read_buf[4];
    p[3] = v_read_buf[5];
    AnsiString filename = p;
    ]

    Ich habe das Problem, das ich immer noch ein Zeichen dazu bekomme, zu den 4 die ich eigentlich will zudem: filename wird im Zusammenhang mit einem SaveDialog benutzt und oft (zu 90%) wird dieser Dialog einfach nicht geöffnet, was wenn ich den Namen fest vorgebe nie passiert.
    Könnt ihr mir weiterhelfen?

    Gruß ansi



  • hi,

    es muss natürlich char p[5] heissen, kleiner Fehler,
    hab aber jetzt ne anständige Lösung gefunden:

    [
    p[0] = v_read_buf[2];
    p[1] = v_read_buf[3];
    p[2] = v_read_buf[4];
    p[3] = v_read_buf[5];
    p[4] = 0x00;
    filename=p;
    ]

    0x00 muss sein sonst steht im AnsiString ein riesenflunz.
    Danke trotzdem.

    Gruß Ansi



  • Hallo,

    Wie oben schon erwähnt, ist dein Puffer um 1 zu klein. Mit deiner Grösse bekommst du ja nicht die abschliessende 0 hinein, so das dein String nicht terminiert ist. Woher soll Ansistring denn wissen wo dein String zuende ist.
    Also: Feldgrösse auf 5 erhöhen und an die letzte Position eine 0 schreiben ('\0').
    [edit]Da war ich wohl zu langsam[/Edit]

    Ciao


Anmelden zum Antworten