QString转换成LPCWSTR
不知道大家用QT做什么程序,但应该还是Windows程序居多吧,仍免不了与WINAPI打交道。这就要求数据类型要与Windows一致,而QT的数据类型却是自成一体的。这就需要转换。比如我用到了LogonUser函数,其原型是:
BOOL LogonUser(_In_ LPTSTR lpszUsername,_In_opt_ LPTSTR lpszDomain,_In_opt_ LPTSTR lpszPassword,_In_ DWORD dwLogonType,_In_ DWORD dwLogonProvider,_Out_ PHANDLE phToken);
因为实际使用LogonUserW函数,所以要求LPCWSTR类型(前三个参数)。一开始我没当回事,这样写:
char* szLogin = new char[MAX_LENGTH]; memset(szLogin, 0, MAX_LENGTH);QByteArray ba111 = strUser.toLocal8Bit(); // strUser是QString,外部传来的数据。char* temp111 = ba111.data(); strcpy(szLogin, temp111);
然后强行转换char*到LPCWSTR:
HANDLE hh;if (!LogonUser((LPCWSTR)szLogin, (LPCWSTR)szDomaine, (LPCWSTR)szPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hh))
编译不报错,但是执行错误。我猜测是不是toLocal8Bit()函数使用错误,毕竟LPCWSTR要求的是宽字符,强行转换之后,这个char*内部仍是使用一个字节表示一个字母,我做强行转换,只是把编译器骗过去而已,编译器并没有帮我做任何事情。后来灵机一动,既然QT是内置Unicode编码的,那么QChar应该是16位的宽字符,于是查了QString函数以后,这样写:
const QChar* szLogin = strUser.unicode();
此时再转换就没有问题了:
if(!LogonUser((LPCWSTR)szLogin, (LPCWSTR)szDomaine, (LPCWSTR)szPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hh))
另外这几个函数可能也有帮助,但目前不清楚怎么用:
std::string toStdString () conststd::wstring toStdWString () constconst ushort * utf16 () const
TCHAR理论上也是对的,但初始化之后,接下去不知道该怎么用了:
TCHAR* szLogin = new TCHAR[MAX_LENGTH]; memset(szLogin, 0, MAX_LENGTH);
如果只是转换常量的会超级简单,就不需要经过QString的手了:
LPCWSTR str = TEXT("Hello");
参考:
https://www.yuque.com/docs/share/be66fab4-275f-4b29-8f0f-2fca213e35d7
QString转换成LPCWSTR相关推荐
- 关于char[]转换成LPCWSTR的有关问题
一.问题的原因:VS2010默认采用宽字符UNICODE编码方式,定义了Unicode,因此相关的字符串必须为unicode字符串,而非ascii字符串. LPCWSTR中的W是宽字符的意思,是UNI ...
- Qt将QString转换成ASCII码
Qt将QString转换成ASCII码 原理很简单,获取字符串的UTF-8编码,然后逐个读取强转成int类型即可. QString s = "Three Second 三秒"; Q ...
- MFC中关于char[]转换成LPCWSTR的问题
在写Win32应用程序时候,你可能遭遇到如下错误 : error C2664: 'LoadImageW' : cannot convert parameter 2 from 'char [20]' t ...
- qt5中字符串转字符串数组_Qt中的对象类型转换(Qstring 转换char*有三种方法)
char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22"; ch2 = c ...
- QT 16进制数转换成QString显示
/* * 16进制数转换成QString显示 */ QString hexToString(unsigned char *in, int len) { int i; unsigned char i ...
- 二进制图片转换成BMP位图(C++)
void saveBitmap() { //一个586*586的二进制图片 const int height = 586; const int width = 586; //新生产bmp图片数据块总大 ...
- VC2008中将CString转换成const char*的一种有效方法
文章转载自http://blog.csdn.net/lanbing510/article/details/7425613 在Visual Studio 200X下,CString直接转换成const ...
- 海康威视IPCamera图像捕获方法:捕获实时流,将实时流解码成YV12,然后转换成RGB
将他的MFC工程相关的代码抠出来,重组.于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的,需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色度空间,这个过程是在 ...
- pyrcc5将resources.qrc转换成py文件
需要通过pyrcc5将resources.qrc转换成py文件,并在主程序引入. pyrcc5 -o resources_rc.py resources.qrc 用python3+PyQt5改写Pyt ...
最新文章
- 如何配置一台深度学习工作站?
- 给不爱洗手找个理由——皮肤共生菌可以促进伤口愈合
- TCP/IP网络的一些问题(路由/协议/linux的实现)
- 排序 np_P问题、NP问题、NP完全问题和NP难问题理解
- 【PC工具】nodemcu ESP8266常用USB转串口芯片驱动CP210x、CH340G驱动安装有可能遇到的问题及解决办法...
- Java8 - 自定义实现体会Future的原理
- 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
- Bootstrap学习笔记(三) 网格系统
- RouterOS V2.9.27 固定IP双电信分流教程(详)
- ubuntu 20.04 安装circos
- 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
- c语言OBJECT数组,Objective-C中NSArray的基本用法示例
- java.lang.IllegalStateException报警
- 人人都能玩航拍 手把手教你装4轴
- Pymol入门教程--基础
- 前后端分离的跨域问题
- Vue 视频音频播放
- duck typing
- cuba study
- Halcon 3D create_pose
热门文章
- 中职计算机网络基础知识点总结,计算机应用基础知识点【中等职业学校计算机应用基础课程教学探索】...
- php编程入门指南快学快用,会计:快学快用实操笔记
- java spring详解
- 【python算法练习】
- PowerPivot的DAX函数实战
- lmx6q开发板android,iTOP-i.MX6Q开发板在内核源码中以modules的方式编译驱动
- Ubuntu 20.04 下安装 OpenCV 3.4.11 并测试使用
- PHP数组foreach循环
- 盖茨接班人Ray Ozzie: 盖茨称他为宇宙中最顶尖的5位程序员之一
- 一级建造师-通信-必学问题