2011-01-08 11 views
1

wie die Frage sagt, was wäre eine geeignete Template-Funktion zum Konvertieren von wstring in const char *? Mein Programm ist vollständig in Unicode geschrieben, aber SQlite benötigt const char * für die meisten ihrer Funktionen.Funktion zum Umwandeln von wstring in const char * für SQlite

Ich habe die Methode gefunden, dies auf msdn zu tun, hier: http://msdn.microsoft.com/en-us/library/ms235631%28v=vs.80%29.aspx, wo Name ein wstring ist.

// Convert to a char* 
    size_t origsize = wcslen(name.c_str()) + 1; 
    const size_t newsize = 100; 
    size_t convertedChars = 0; 
    char nstring[newsize]; 
    wcstombs_s(&convertedChars, nstring, origsize, name.c_str(), _TRUNCATE); 

Antwort

2

Sie sollten die * 16 sqlite Funktionen (z.B. sqlite3_prepare16) wobei you4 können UTF-16 (das heißt wstring) als Parameter erhalten. Don_t vergessen, 2 * wcslen als Länge der Zeichenfolge zu verwenden. Wenn Sie auf den const char * -Funktionen bestehen, müssen Sie zuerst zu UTF-8 konvertieren.

+0

Wenn Sie eine plattformübergreifende Anwendung schreiben, beachten Sie, dass 'wchar_t' nicht unbedingt eine UTF-16-Codeeinheit ist. Natürlich ist es unter Windows. – dan04

+0

Warum muss ich die Länge der Zeichenfolge mit zwei multiplizieren? – rem45acp

+1

Da wcslen gibt die Länge in Anzahl der wchar_t Zeichen, die 2 Bytes sind, und SQLite will die Länge in Bytes. – hmuelner

Verwandte Themen