醉了,windows下宏定义了很多char类型 LPTSTR 。今天,直接使用,qt报错,真TM费事。

将“CPU”转化为wcha_t *

  1. QString str = "CPU";
  2. const wchar_t * str_cpu = reinterpret_cast<const wchar_t *>(str.utf16());//char * 转换为 wchar_t * 类型

下面这篇blog很好

QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化

点击打开链接

  1. //QString to wchar_t *:
  2. const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16());
  3. //QString to char * given a file name:
  4. QByteArray fileName = QFile::encodeName(aFileName);
  5. const char * encodedName = fileName.constData(); //Valid as long as fileName exists
  6. //QString to char * (general case):
  7. const char * tmp = str.toUtf8().constData();
  8. [/code]
  9. Windows 数据类型: http://msdn.microsoft.com/en-us/library/aa383751.aspx
  10. [code lang="cpp"]
  11. //TCHAR:
  12. #ifdef UNICODE
  13. typedef wchar_t TCHAR;
  14. #else
  15. typedef char TCHAR;
  16. #endif
  17. //LPCTSTR:
  18. #ifdef UNICODE
  19. typedef LPCWSTR LPCTSTR;
  20. #else
  21. typedef LPCSTR LPCTSTR;
  22. #endif
  23. //LPCSTR:
  24. typedef const char * LPCSTR;
  25. //LPCWSTR:
  26. typedef const wchar_t * LPCWSTR;
  27. //LPCWSTR to QString:
  28. QString text(QString::fromUtf16(reinterpret_cast<const unsigned short *>(tmp)));
  29. 另一种解决办法是使用QString::fromWCharArray(),但这个函数可能导致一些尚未解决的wchar_t符号问题。
  30. 最佳的编程风格: 使用L来定义wchar_t宽字符串,比如 L"text" 字义了一个UNICODE字符串"text"。
  31. 今天又看到一个文章,关于字符串之间的转换,比较全面,在此将英文翻译并整理一下。
  32. 原文地址:http://hi.baidu.com/koko200147/blog/item/7e3cad828c9b9bb66d8119cb.html
  33. QString与其他字符类型之间的转换,QString在Qt4中是UNICODE编码的,使用utf16规范。
  34. QString::fromAscii ( const char * str, int size = -1 );
  35. QString::fromLatin1 ( const char * str, int size = -1 );
  36. QString::fromLocal8Bit ( const char * str, int size = -1 );
  37. QString::fromRawData ( const QChar * unicode, int size );
  38. QString::fromStdString ( const std::string & str );
  39. QString::fromStdWString ( const std::wstring & str );
  40. QString::fromUcs4 ( const uint * unicode, int size = -1 );
  41. QString::fromUtf8 ( const char * str, int size = -1 );
  42. QString::fromUtf16 ( const ushort * unicode, int size = -1 );
  43. QString::fromWCharArray ( const wchar_t * string, int size = -1 );
  44. //qstring ->std::string
  45. QString::toStdString () ;
  46. QString::toStdWString ();
  47. //BSTR<->QString,不太了解BSTR是什么,还没用到过,所以不知道对不对
  48. BSTR bstr_str;
  49. QString q_str((QChar*)bstr_str, wcslen(bstr_str));
  50. bstr_str = SysAllocString(q_str.utf16());//remember use SysFreeString on BSTR
  51. //QString<->LPCSTR
  52. QString::toLocal8Bit().constData();
  53. QString::fromLocal8Bit ( const char * str, int size = -1 );
  54. //QString<->LPCWSTR
  55. QString::utf16();
  56. QString::fromUtf16 ( const ushort * unicode, int size = -1 );
  57. //QString<->CString
  58. CString c_str(qstring::utf16());
  59. QString fromUtf16 (LPCTSTR(c_str) );
  60. CString转换为char*
  61. //1.传给未分配内存的const char* (LPCTSTR)指针.
  62. CString cstr(asdd);
  63. const char* ch = (LPCTSTR)cstr;//ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.
  64. //2.传给未分配内存的指针.
  65. CString cstr = "ASDDSD";
  66. char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
  67. cstr.ReleaseBuffer();
  68. //修改ch指向的值等于修改cstr里面的值.
  69. //PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.
  70. //3.第二种用法。把CString 值赋给已分配内存的char *。
  71. CString cstr1 = "ASDDSD";
  72. int strLength = cstr1.GetLength() + 1;
  73. char *pValue = new char[strLength];
  74. strncpy(pValue, cstr1, strLength);
  75. //4.第三种用法.把CString 值赋给已分配内存char[]数组.
  76. CString cstr2 = "ASDDSD";
  77. int strLength1 = cstr1.GetLength() + 1;
  78. char chArray[100];
  79. memset(chArray,0, sizeof(bool) * 100); //将数组的垃圾内容清空.
  80. strncpy(chArray, cstr1, strLength1);
  81. //5.如果上述都不行,使用以下方法
  82. CString origCString("Hello, World!");
  83. wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1);
  84. size_t origsize = wcslen(wCharString) + 1;
  85. size_t convertedChars = 0;
  86. char *CharString;
  87. CharString=new char(origsize);
  88. wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE);
  89. cout << CharString << endl; //成功输出字符串"Hello,World"
  90. 从UTF8编码到GB编码的字符串转换方法:
  91. QString Utf8_To_GB(QString strText)
  92. {
  93. return QString::fromUtf8(strText.toLocal8Bit().data());
  94. }
  95. 从GB编码到UTF8编码的字符串转换方法:
  96. QString GB_To_Utf8(char *strText)
  97. {
  98. return QString::fromLocal8Bit(strText);
  99. }

对了还有一些QT的QString char int之间的转换

这篇点击打开链接

  1. char * 与 const char *的转换
  2. char *ch1="hello11";
  3. const char *ch2="hello22";
  4. ch2 = ch1;//不报错,但有警告
  5. ch1 = (char *)ch2;
  6. char 转换为 QString
  7. 其实方法有很多中,我用的是:
  8. char a='b';
  9. QString str;
  10. str=QString(a);
  11. QString 转换为 char
  12. 方法也用很多中
  13. QString str="abc";
  14. char *ch;
  15. ch = str.toLatin1.data();
  16. QByteArray 转换为 char *
  17. char *ch;//不要定义成ch[n];
  18. QByteArray byte;
  19. ch = byte.data();
  20. char * 转换为 QByteArray
  21. char *ch;
  22. QByteArray byte;
  23. byte = QByteArray(ch);
  24. QString 转换为 QByteArray
  25. QByteArray byte;
  26. QString string;
  27. byte = string.toAscii();
  28. QByteArray 转换为 QString
  29. QByteArray byte;
  30. QString string;
  31. string = QString(byte);
  32. 这里再对这俩中类型的输出总结一下:
  33. qDebug()<<"print";
  34. qDebug()<<tr("print");
  35. qDebug()<<ch;(ch 为char类型)
  36. qDebug()<<tr(ch);
  37. qDebug()<<byteArray;(byteArray是QByteArray类型)
  38. qDebug()<<tr(byteArray);
  39. qDebug()<<str;(str 为Qstring类型)
  40. 但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
  41. qDebug()<<tr(str.toLatin1);
  42. int 转 QString
  43. int a=10;
  44. QString b;
  45. b=QString::number(a)
  46. QString 转int
  47. QString a="120"
  48. int b;
  49. b=a.toInt()
  50. char * 与 const char *的转换
  51. char *ch1="hello11";
  52. const char *ch2="hello22";
  53. ch2 = ch1;//不报错,但有警告
  54. ch1 = (char *)ch2;
  55. char 转换为 QString
  56. 其实方法有很多中,我用的是:
  57. char a='b';
  58. QString str;
  59. str=QString(a);
  60. QString 转换为 char
  61. 方法也用很多中
  62. QString str="abc";
  63. char *ch;
  64. ch = str.toLatin1.data();
  65. QByteArray 转换为 char *
  66. char *ch;//不要定义成ch[n];
  67. QByteArray byte;
  68. ch = byte.data();
  69. char * 转换为 QByteArray
  70. char *ch;
  71. QByteArray byte;
  72. byte = QByteArray(ch);
  73. QString 转换为 QByteArray
  74. QByteArray byte;
  75. QString string;
  76. byte = string.toAscii();
  77. QByteArray 转换为 QString
  78. QByteArray byte;
  79. QString string;
  80. string = QString(byte);
  81. 这里再对这俩中类型的输出总结一下:
  82. qDebug()<<"print";
  83. qDebug()<<tr("print");
  84. qDebug()<<ch;(ch 为char类型)
  85. qDebug()<<tr(ch);
  86. qDebug()<<byteArray;(byteArray是QByteArray类型)
  87. qDebug()<<tr(byteArray);
  88. qDebug()<<str;(str 为Qstring类型)
  89. 但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
  90. qDebug()<<tr(str.toLatin1);
  91. int 转 QString
  92. int a=10;
  93. QString b;
  94. b=QString::number(a)
  95. QString 转int
  96. QString a="120"
  97. int b;
  98. b=a.toInt()
  99. 另一个
  100. 1 QString --> string
  101. QString.toStdString();
  102. 2 string --> QString
  103. QString::fromStdString(string)
  104. 3 QString --->int,double,char *
  105. QString::toInt()
  106. QString::toDouble()
  107. QString.toStdString().c_str();
  108. 4 int double char* --->string
  109. 可以采用<sstream>里的stringstream
  110. 以int 为例,int a = 3;
  111. stringstream ss;
  112. string strInt;
  113. ss<<a;
  114. ss>>strInt;

还有一篇,也不错。Qt中 QString 和int, char等的“相互”转换 点击打开链接

http://blog.csdn.net/qq61394323/article/details/28391579

QString转换为LPTSTR(使用了reinterpret_cast,真是叹为观止,但是也开阔了思路),三篇文章合起来的各种转换方法的更多相关文章

  1. QString转换为char*

    QString在Qt里相当于C++里的std::string,或者是C里的c style string.不过,QString跟编码相关,在低层想把一个QString发送出去相当麻烦,尤其对方用的不是Q ...

  2. Qt中将QString转换为char *或者相反

    1.将QString转换为std::string,可以通过QString的成员函数toStdString() QString Qstr="123";std::string str= ...

  3. QString 转换为 char *

    一.QString 转换为 char * 将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档. 因为 char * 最后都有一 ...

  4. QString转换为char* (转)

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...

  5. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了And ...

  6. 深入浅出Node.js(上)

    (一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟 ...

  7. Thrift 原理与使用实例

    一.Thrift 框架介绍 1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定 ...

  8. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

随机推荐

  1. [CSS] Re-order the appearance of grid items using the order property

    As with flex items, we can set an order value on grid items. Let’s see how this affects the DOM and ...

  2. [Angular Directive] Structure directive and <template>

    The structure directive is just a sugar syntax of <template>. Such as: <div *ngIf="nam ...

  3. hdfs的基本原理和基本操作总结

    hdfs基本原理 Hadoop分布式文件系统(HDFS)被设计成适合执行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有非常多共同点. 但同一时候,它和 ...

  4. Log4erl

    http://developerworks.github.io/2011/05/16/erlang-use-log4erl/ Erlang 使用Log4erl all = debug < inf ...

  5. echarts多条折线图和柱状图实现

    参考链接:echarts官网:http://echarts.baidu.com/原型图(效果图): 图片.png 代码: <!DOCTYPE html> <html> < ...

  6. Erlang 学习笔记

    http://wenku.baidu.com/link?url=AUQR8Hn-e-fEB_lqjXsd8XfapWj1qAK7J05JoBXFib_LlSk5qSOTia8HIxNV1XkeZi-k ...

  7. 常见排序算法(java实现)

    常见排序算法介绍 冒泡排序 代码: public class BubbleSort { public static void sort(int[] array) { int tValue; for ( ...

  8. spring data jpa auditing

    审计日志,记录实体版本的修改信息,创建时间,修改时间,创建人,修改人等 可以采用切片AOP的方式实现,也可以通过Spring Data JPA的审计功能实现 切片方式 Spring AOP中Point ...

  9. hexo主题选择和配置

    之前用next主题,发现文章标题都是h2,不利于seo,想着通过改模板改成h1的,发现很繁琐.今天发现,通过下载指定版本的next后,标题自动是h1的. 参考网页https://notes.iissn ...

  10. 192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js

    尝试了各种方法,始终安装不了node.偶然一次,安装了64位的Centos 6 minimal,竟然可以安装Node官网给出的命令安装node了,一切顺利.