在https://www.sqlite.org/c3ref/column_blob.html中使用sqlite3_column_text16和sqlite3_column_bytes16时,我只能得到一个指向UTF-16文本缓冲区的指针以及该缓冲区中的字节数。
现在我需要将这样的缓冲区转换为CString对象。怎么做?看来CString仅具有以下构造函数:
CString( LPCTSTR lpch, int nLength ); // requires LPCTSTR and number of chars, not bytes
CString( LPCWSTR lpsz ); // requires null-terminiated Unicode buffer
两者似乎都不适合我的情况。
答案 0 :(得分:0)
CString( LPCTSTR lpch, int nLength )
将完成工作。它仅需要LPCTSTR
强制转换,在这种情况下只需LPCWSTR
。 nLength
的大小应除以2以说明wchar_t
如果您的程序不是Unicode,请使用CStringW
。
示例:
//create a buffer (buf) and copy a wide string in to it
const wchar_t *source = L"ABC";
int len = wcslen(source);
int bytesize = len * 2;
BYTE *buf = new BYTE[bytesize + 2]; //optional +2 for null terminator
memcpy(buf, source, bytesize);
//copy buf into destination CString
CString destination((LPCWSTR)buf, bytesize / 2);
delete[]buf;
MessageBoxW(0, destination, 0, 0);
buf
和bytesize
来自数据库,因此只需输入:
CString destination((LPCWSTR)buf, bytesize / 2);
//or
CStringW destination((LPCWSTR)buf, bytesize / 2);