以下这篇文章是2年前保存的,不知道出自何处了,那就暂时佚名先,如果哪位兄台知道出处再打上去.
通常,有以下3种方式定义字符和字符串:
●ANSI字符和字符串
●Unicode字符和字符串
●双模式字符和字符串
1.ANSI字符和字符串
C或C++程序员都知道:通常使用单引号来定义一个字符常量(如'H'),使用双引号来定义一个字符串常量(如"Hello")。
在windows编程中,这样的字符和字符串被称为ANSI字符和字符串,有时也称为单字节字符和字符串。
同样,为了定义一个ANSI字符变量、字符数组或字符指针,在C/C++程序中通常使用char或char*数据类型来定义。同时,
win32 API还定义了CHAR和LPSTR数据类型来增强代码的可移植性。
在对ANSI字符串进行操作时,C/C++通常使用下列几个函数:
●strlen() --返回字符串的长度
●strcpy() --复制字符串
●strcat() --连接字符串
2.Unicode字符和字符串
在从windows2000往后的windows操作系统中,都只支持Unicode编码的字符和字符串,同样,wince也只支持Unicode编码的
字符和字符串,而不支持ANSI字符和字符串。在Unicode编码中,所有字符的存储都占用2个字节,而在编程时,通过使用字符前缀“L”来创建一个Unicode字符或字符串,如L'H'表示一个常量Unicode字符,而L"Hello"表示一个常量Unicode字符串。
为了定义一个Unicode数据类型,通常使用WCHAR来定义一个Unicode字符变量或字符数组,使用LPWSTR定义一个指向Unicode字符串的指针。
与ANSI字符串操作函数相对应,对Unicode字符串的操作使用下列对应的函数:
●wcslen() --返回字符串的长度
●wcscpy() --复制字符串
●wcscat() --连接字符串
其中wcs代表wide-character string(宽字符串)。
3.双模式字符和字符串
双模式字符和字符串允许程序员在只拥有一个源文件的情况下,使其中的字符和字符串既可以适用于Unicode编码的操作系统,也可以适用于非Unicode编码的操作系统。windows 98/ME使非Unicode操作系统的典型例子。为了将一个字符或字符串定义为双模式字符或字符串,通常使用TEXT()或_T()宏,他们被定义在tchar.h头文件中。例如TEXT("Hello")就表示一个双模式字符串,在对包含这个字符串的源文件进行编译的时,如果编译器发现定义了_UNICODE预处理器符号,那么TEXT("Hello")就被转换为L"Hello",否则,它被转换为"Hello"。
为了在一个C/C++源文件中请求Unicode字符选项,需要include语句之前定义_UNICODE,如下:
#define _UNICODE
#include
在编写双模式代码时,应该选择使用双模式数据类型宏,通常使用TCHAR宏来定义字符串变量或字符数组,而使用LPTSTR定义字符指针。
如果在一个源文件中将字符或字符串定义为了双模式,那么对于字符串的操作也应该使用双模式字符串函数,与ANSI和Unicode字符串操作函数相对应,双模式字符串操作函数如下:
●tcslen() --返回字符串的长度
●tcscpy() --复制字符串
●tcscat() --连接字符串
4.Unicode转换
---------------------------------
非Unicode转换为Unicode:mbstowcs(wchar_t *wcstr, //输出字符串
const char *mbstr, //输入字符串
size_t count); //字符个数
例子:
WCHAR wchOut[256];
LPSTR pstrIn="Hello World";
mbstrtowcs(wchOut,pstrIn,strlen(pstrIn));
---------------------------------
Unicode转换为非Unicode:wcstombs(char *mbstr, //输出字符串
const wchar_t *wcstr,//输入字符串
size_t count); //字符个数
例子:
CHAR mbsOut[256];
LPWSTR pwchIn=L"A Unicode String";
wcstombs(mbsOut,pwchIn,wcslen(pwchIn));
5.字符串输出
●MessageBox
●NKDbgPrintfW
MessageBox用于在wince设备屏幕上的一个消息窗口中显示一个字符串消息,它是windows应用程序中输出消息的一种很重要
的方式,但在wince中,它只能用于基于显示的设备,即只有当系统中具有GWES模块时它才是可用的。下面是MessageBox
函数的原型:
int MessageBox(
HWND hWnd, //产生消息框的窗口句柄
LPCTSTR lpText, //指向输出字符串的指针
LPCTSTR lpCaption, //指向消息框标题字符串的指针
UINT uType); //定义消息框行为的位标志
下面是使用MessageBox函数的一个例子:
MessageBox(NULL,TEXT("Hello,Everyone"),TEXT("Test"),MB_OK);
NKDbgPrintfW函数用于在调试器中显示一个格式化的字符串,使用它的优点是它既能被用于基于显示的设备,也能被用于无 头设备,同时,它使用与C运行函数sprintf相同的格式化参数。下面是使用NKDbgPrintfW函数输出字符串变量pVal和整型变 量iVal值的一个例子:
NKDbgPrintfW(TEXT("The String is:%s,The integer is :%d\r\n",pVal,iVal);
阅读(2961) | 评论(1) | 转发(0) |