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 alsshort*
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 einenconst void*
.
Du darfst also den Text nicht verändern.Für das genaue Vorgehen solltest du mal RTFM von der anderen Software machen.