zoukankan      html  css  js  c++  java
  • 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 () const
    std::wstring toStdWString () const
    const ushort * utf16 () const

    TCHAR理论上也是对的,但初始化之后,接下去不知道该怎么用了:

    TCHAR* szLogin = new TCHAR[MAX_LENGTH]; memset(szLogin, 0, MAX_LENGTH); 

    如果只是转换常量的会超级简单,就不需要经过QString的手了:

    LPCWSTR str = TEXT("Hello"); 

  • 相关阅读:
    django 登入,注册,密码重置
    Django 通过 admin 操作 MySQL数据库 ,审核功能加储存记录
    Python Django 循环插入到 MongoDB数据库中
    运行Django找不到Windows“http://127.0.0.1:8000/”的问题
    大数据 ----- Linux(基础命令)
    大数据 ----- 虚拟机与SXhell6 的链接
    大数据 ----- 在Xshell6 安装Hadoop与JDK以及环境变量
    java day14第十四课 IO(输入、输出)流和JAVA目录操作(重中之重)
    13弹;集合中的工具类Collections和Arrays
    第3弹;流程控制
  • 原文地址:https://www.cnblogs.com/findumars/p/4295899.html
Copyright © 2011-2022 走看看