不知道大家用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相关推荐

  1. 关于char[]转换成LPCWSTR的有关问题

    一.问题的原因:VS2010默认采用宽字符UNICODE编码方式,定义了Unicode,因此相关的字符串必须为unicode字符串,而非ascii字符串. LPCWSTR中的W是宽字符的意思,是UNI ...

  2. Qt将QString转换成ASCII码

    Qt将QString转换成ASCII码 原理很简单,获取字符串的UTF-8编码,然后逐个读取强转成int类型即可. QString s = "Three Second 三秒"; Q ...

  3. MFC中关于char[]转换成LPCWSTR的问题

    在写Win32应用程序时候,你可能遭遇到如下错误 : error C2664: 'LoadImageW' : cannot convert parameter 2 from 'char [20]' t ...

  4. qt5中字符串转字符串数组_Qt中的对象类型转换(Qstring 转换char*有三种方法)

    char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22"; ch2 = c ...

  5. QT 16进制数转换成QString显示

    /*  * 16进制数转换成QString显示  */ QString hexToString(unsigned char *in, int len) { int i; unsigned char i ...

  6. 二进制图片转换成BMP位图(C++)

    void saveBitmap() { //一个586*586的二进制图片 const int height = 586; const int width = 586; //新生产bmp图片数据块总大 ...

  7. VC2008中将CString转换成const char*的一种有效方法

    文章转载自http://blog.csdn.net/lanbing510/article/details/7425613 在Visual Studio 200X下,CString直接转换成const ...

  8. 海康威视IPCamera图像捕获方法:捕获实时流,将实时流解码成YV12,然后转换成RGB

    将他的MFC工程相关的代码抠出来,重组.于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的,需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色度空间,这个过程是在 ...

  9. pyrcc5将resources.qrc转换成py文件

    需要通过pyrcc5将resources.qrc转换成py文件,并在主程序引入. pyrcc5 -o resources_rc.py resources.qrc 用python3+PyQt5改写Pyt ...

最新文章

  1. 如何配置一台深度学习工作站?
  2. 给不爱洗手找个理由——皮肤共生菌可以促进伤口愈合
  3. TCP/IP网络的一些问题(路由/协议/linux的实现)
  4. 排序 np_P问题、NP问题、NP完全问题和NP难问题理解
  5. 【PC工具】nodemcu ESP8266常用USB转串口芯片驱动CP210x、CH340G驱动安装有可能遇到的问题及解决办法...
  6. Java8 - 自定义实现体会Future的原理
  7. 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
  8. Bootstrap学习笔记(三) 网格系统
  9. RouterOS V2.9.27 固定IP双电信分流教程(详)
  10. ubuntu 20.04 安装circos
  11. 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
  12. c语言OBJECT数组,Objective-C中NSArray的基本用法示例
  13. java.lang.IllegalStateException报警
  14. 人人都能玩航拍 手把手教你装4轴
  15. Pymol入门教程--基础
  16. 前后端分离的跨域问题
  17. Vue 视频音频播放
  18. duck typing
  19. cuba study
  20. Halcon 3D create_pose

热门文章

  1. 中职计算机网络基础知识点总结,计算机应用基础知识点【中等职业学校计算机应用基础课程教学探索】...
  2. php编程入门指南快学快用,会计:快学快用实操笔记
  3. java spring详解
  4. 【python算法练习】
  5. PowerPivot的DAX函数实战
  6. lmx6q开发板android,iTOP-i.MX6Q开发板在内核源码中以modules的方式编译驱动
  7. Ubuntu 20.04 下安装 OpenCV 3.4.11 并测试使用
  8. PHP数组foreach循环
  9. 盖茨接班人Ray Ozzie: 盖茨称他为宇宙中最顶尖的5位程序员之一
  10. 一级建造师-通信-必学问题