wchar_t

string、wstring、cstring、 char、 tchar、int、dword转换方法

感情迁移 提交于 2020-04-06 07:19:53
最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多: 1》string转wstring wstring s2ws(const string& s) { _bstr_t t = s.c_str(); wchar_t* pwchar = (wchar_t*)t; wstring result = pwchar; return result; } 2》wstring转string string ws2s(const wstring& ws) { _bstr_t t = ws.c_str(); char* pchar = (char*)t; string result = pchar; return result; } 3》string转cstring a)CString.format("%s", string.c_str()); b)CString StringToCString(string str) { CString result; for (int i=0;i<(int)str.length();i++) { result+=str[i]; } return result; } 4》cstring转string a)void

编译Qt以及驱动的一点总结吧

血红的双手。 提交于 2020-04-04 06:49:33
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的。只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查资料看博客,一定要注意博文的文字细节,有时候差几个字就能让你费很大的劲,四处碰壁。 首先解压源码包到你想要保存编译的位置,注意文件目录一定不能包含中文和空格! 由于Qt4.8在VS环境下的一些问题,为了避免编译中途出现,我总结了3个地方需要修改。 (1) 删除源码包中bin目录下的syncqt和syncqt.dat文件,如你不放心可将其改名或剪切到别的位置。如不修改将发生 Perl not found in environment - cannot run syncqt 错误。 (2) 修改\mkspecs\win32-msvc2010下的qmake.conf文件,将其中的 QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t-改成QMAKE_CFLAGS=

Windows编程 Windows下Unicode编码

╄→尐↘猪︶ㄣ 提交于 2020-04-01 04:19:56
我们知道在ascii编码,每个字符占用一个字节,这样能够表示的字符数远远不够表示世界所有语言的符号,所以Unicode编码就是出现了,当然Unicode也有8位 16位 32位的编码,UTF-8、UTF-16、UTF-32分别以char、char16_t、char32_t作为编码单位,本文讨论16位 即UTF-16,(注: char16_t 和 char32_t 是 C++ 11 标准新增的关键字。如果你的编译器不支持 C++ 11 标准,请改用 unsigned short 和 unsigned long。) 当然本文着重讨论Unicode在Windows中的应用,至于具体细节以及原理上的东西,本人才疏学浅,不配在此谈论此问题,呵呵。还请各位到Google去寻找大牛吧。。由于个人能力有限,文中难免有错误之处,还请各位多多批评和指正,多多包涵才是。 许久以前我在学习MFC的过程中,用GetDlgItemText获取Edit Control的值,其得到的值是CString,我们看下该函数的原型: int GetDlgItemText( HWND hDlg , int nID, LPTSTR lpStr, int nMaxCount) const; int GetDlgItemText( int nID, CString& rString) const;

Unicode字符集

我们两清 提交于 2020-04-01 04:18:59
Unicode字符集的出现是为了弥补ASCII码只能表示128个字符的限制。在实际应用中,如若我们想显示汉字或日文等等,显然使用ASCII是不可能的。Unicode占用了两个字节,即16位,能表示的字符高达65536。即使像汉字这样庞大的语言,也不过3W左右的字符,所以Unicode足够应付。当然实际中可能很少用到这种字符集,咱们可以将其作为一项拓展知识面来了解下。 在C语言中,我们有如下定义:char c='A';变量c只需要一个字节来保存,并用十六进制数0x41来初始化,0x41是A的ASCII码。 我们也可以定义:char *p = “hello!”;因为windows是一个32位的操作系统,所以指针变量p需要四个字节来保存。当然,后面的字符串需要7个字节来保存。 宽字符 Unicode或者宽字符都没有改变char数据型态在C中的含义。char继续表示1个字节的储存空间,sizeof (char)继续返回1。理论上,C中1个字节可比8位长,但对我们大多数人来说,1个字节(也就是1个char)是8位宽。 C中的宽字符基于wchar_t数据型态,它在几个表头文件包括 WCHAR.H 中都有定义,像这样: typedef unsigned short wchar_t ; 因此,wchar_t数据型态与无符号短整数型态相同,都是16位宽。 要定义包含一个宽字符的变量,可使用下面的语句

学习vc++的第六天--微软的字符串定义

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-21 01:08:41
我把视频暂停到了 https://www.bilibili.com/video/av79302998?p=62 然后去看了关于字节处理的方式,因为我发现提取一个字符串出来要每次写#ifdef UNICODE挺麻烦的 于是乎我看了 https://www.bilibili.com/video/av38413272/?p=1 的所有字节处理 ● 窄字节: char、char * 、const char * CHAR、(PCHAR、PSTR、LPSTR)、LPCSTR ● Unicode 宽字节: wchar_t、wchar_t * 、const wchar_t * WCHAR、(PWCHAR、PWSTR、LPWSTR)、LPCWSTR ● T 通用类型: TCHAR、(TCHAR * 、PTCHAR、PTSTR、LPTSTR)、LPCTSTR LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。 P表示这是一个指针 C表示是一个常量 T表示在Win32环境中, 有一个_T宏 STR表示这个变量是一个字符串 记忆方法: L(长)P(指针)C(常量)T(通用)STR(字符串) 原来我们只 需要用通用类型 处理字符串就好了.

C++字符类型总结区别wchar_t,char,WCHAR

℡╲_俬逩灬. 提交于 2020-02-29 07:48:40
转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR   ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。   UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里:   typedef unsigned short wchar_t;   另外,在头文件中有这样的定义:typedef wchar_t WCHAR; 所以WCHAR实际就是wchar_t   wchar_t 可用字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如: wchar_t *szTest=L"This is a Unicode string."; 2.TCHAR   在C语言里面提供了 _UNICODE宏(有下划线),在Windows里面提供了UNICODE宏(无下划线),只要定了_UNICODE宏和UNICODE宏,系统就会自 动切换到UNICODE版本,否则,系统按照ANSI的方式进行编译和运行。只定义了宏并不能实现自动的转换,他还需要一系列的字符定义支持。 1. TCHAR

C++多字节与Unicode之间的转化

℡╲_俬逩灬. 提交于 2020-02-26 11:58:47
Unicode Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 char数据类型 C程序中使用char数据类型来定义和存储字符和字符串 下面的声明定义和初始化一个包含单一字符的变量: char c = 'A' ; 定义一个指向字符串的指针: char * p ; 因为Windows是一个32位的操作系统,指针变量p需要4个字节的存储空间。还可以如下初始化一个指向字符串的指针: char * p = "Hello!" ; 更宽的字符 使用Unicode或者是宽字符并不会改变C语言中的字符数据类型。char类型继续代表一个字节的存储空间,而且sizeof(char)继续返回1.理论上来说,C语言中的一个字节可能长于8位,但是对于大多数人来说,一个字节(因而就是一个char)是8位宽。 C语言中的宽字符是基于wchar_t数据类型的。这个数据类型被定义在多个头文件中,包括WCHAR.H,如下所示: typedef unsingned short wchar_t ; 因此,wchar_t数据类型和一个无符号短整型一样,都是16位宽。 可以用下面的语句来定义一个包含单个宽字符的变量

string和wstring相互转换

不羁的心 提交于 2020-02-25 11:08:39
第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): #include <string> #include <windows.h> using namespace std; //Converting a WChar string to a Ansi string std::string WChar2Ansi(LPCWSTR pwszSrc) { int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL); if (nLen<= 0) return std::string(""); char* pszDst = new char[nLen]; if (NULL == pszDst) return std::string(""); WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL); pszDst[nLen -1] = 0; std::string strTemp(pszDst); delete [] pszDst; return strTemp; } string ws2s(wstring&

C++使用sqlite时,中文字符显示乱码问题

一个人想着一个人 提交于 2020-02-24 03:36:42
字符串转换时需要先将ANSI转换成UTF8,在字符串前面加L,即L“我的字符串”; 再利用Unicode 转 Utf8 函数: std::string Unicode2Utf8(const std::wstring& widestring) { int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL); if (utf8size == 0) { throw std::exception("Error in conversion."); } std::vector<char> resultstring(utf8size); int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL); if (convresult != utf8size) { throw std::exception("La falla!"); } return std::string(&resultstring[0]); } 主函数使用: int main() { open_db(); //create_table();

第8章 标准IO库

纵然是瞬间 提交于 2020-02-18 18:28:25
1. IO标准库有几种类型?分别包含在什么头文件中?它们之间的关系怎样(画图)?它们应用的场合怎样? 答:三个头文件: iostream:定义读写控制窗口的类型 fstream:定义读写已命名文件的类型。 sstream:读写内存中string对象 九种类型: iostream头文件中定义了istream、ostream、iostream三种类型 fstream头文件中定义了ifstream、ofstream、fstream三种类型 sstream头文件中定义了istringstream、ostringstream、stringstream三种类型 它们之间的继承关系如下: 它们的应用场合为: istream(从流中读取); ostream(写到流中); iostream(对流进行读写); ifstream(从文件中读取); ofstream(写到文件中去); fstream(对文件进行读写); istringstream(从string对象中读取); ostringstream(写到string对象中去); stringstream(对string对象进行读写); 2. IO标准库是否支持国际化?如何支持?IO类型是否支持复制或赋值?不能复制有什么影响? 答:支持。 标准库定义了一组相关的类型,支持wchar_t类型。每个类都加上“w”前缀,以此与char类型的版本区分开来。于是