将 SQlite 的 wstring 转换为 const char * 的函数
正如问题所说,将 wstring 转换为 const char * 的合适模板函数是什么?我的程序完全是用 Unicode 编写的,但是,SQlite 的大部分功能都需要 const char * 。
我在msdn上找到了这样做的方法,在这里: http://msdn.microsoft.com/en-us/library/ms235631%28v=vs.80%29.aspx,其中 name 是 wstring。
// 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);
as the question says, what would be a suitable template function to convert wstring to const char *? My program is written entirely in Unicode, however, SQlite requires const char * for most of their functions.
I found the method of doing this on msdn, here: http://msdn.microsoft.com/en-us/library/ms235631%28v=vs.80%29.aspx, where name is a wstring.
// 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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该使用*16 sqlite 函数(例如sqlite3_prepare16),其中您可以将UTF-16(即wstring)作为参数。不要忘记使用 2*wcslen 作为字符串的长度。如果您坚持使用 const char* 函数,则必须先转换为 UTF-8。
You should use the *16 sqlite functions (e.g. sqlite3_prepare16) where you4 can give UTF-16 (i.e. wstring) as parameters. Don_t forget to use 2*wcslen as length of the string. If you insist on the const char* functions, you have to convert to UTF-8 first.