kopieren von daten verschiedenen types



  • Hi

    Vielleicht kann mir jemand bei folgendem helfen.

    Ich möchte mit sqlite daten in eine andere software übertragen.

    Um Daten zu erhalten benutze ich folgende Funktion aus sqlite:

    const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);

    die Software in die die Daten kopiert werden sollte, definiert ihre
    Strings als

    short*

    Ich würde jetzt gerne wissen wie ich von const void* auf short* daten kopieren
    kann.

    mfg
    srard



  • Da du wohl nur die Zeiger weiter reichen musst, sollte ein cast ausreichen um den Compiler zu beruhigen.

    Arbeitet denn die andere Software auch mit UTF-16 ?



  • DirkB schrieb:

    Da du wohl nur die Zeiger weiter reichen musst, sollte ein cast ausreichen um den Compiler zu beruhigen.

    Arbeitet denn die andere Software auch mit UTF-16 ?

    Hi

    danke für die schnelle Antwort.

    Bei der anderen Software arbeitet der String normalerweise mit
    einem char* array, für die utf-16 Geschichte wurde dann extra ein
    typ short* eingeführt.

    Kannst du mir vielleicht ein kurzes Beispiel geben, wie ich den cast machen
    kann?.

    Danke für die Hilfe!



  • Das hängt davon ab, was für eine Typ die Variable für den Rückgabewert ist

    void *text16;
    ...
    text16 = sqlite3_column_text16(sqlite3_stmt, iCol); 
    andereSoftware((short*)text16, ...)
    

    oder

    short *text16;
    ...
    text16 = (short *)sqlite3_column_text16(sqlite3_stmt, iCol); 
    andereSoftware(text16, ...)
    

    oder

    andereSoftware((short *)sqlite3_column_text16(sqlite3_stmt, iCol), ...)
    


  • DirkB schrieb:

    Das hängt davon ab, was für eine Typ die Variable für den Rückgabewert ist

    short *text16;
    ...
    text16 = (short *)sqlite3_column_text16(sqlite3_stmt, iCol); 
    andereSoftware(text16, ...)
    

    ich hab noch ein kleines Problem...
    soweit:

    short* text16;
    int size;
    
    text16=(short*)sqlite3_column_text16(sqlstatement,0);
    size=sqlite3_column_bytes16(sqlstatement,0); //größe des textes in bytes...
    
    danach versuche ich die Daten zur anderen software zu kopiern..
    
    memcpy(struct->name->chars,text16,size)
    Das crashed bei mir....
    
    weiters hab ich folgendes versucht.
    
    struct->name->chsrs=text16;
    das verschluckt es mir die ersten zwei Zeichen des Textes..
    

    Bin ein wenig ratlos was ich falsch mache...



  • Da du nicht schreibst was für eine andere Software du da benutzt, kann ich dir dazu nichts sagen.

    Gegen memcpy(struct->name->chars,text16,size) ist erstmal nichts einzuwenden, wenn ...->chars auf gültigen und ausreichenden Speicher verweist.

    Gegen struct->name->chsrs=text16; spricht allerdings auch nichts.

    Das sqlite3_column_text16 liefert dir einen const void* .
    Du darfst also den Text nicht verändern.

    Für das genaue Vorgehen solltest du mal RTFM von der anderen Software machen.


Anmelden zum Antworten