Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15501813
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2009-03-30 12:21:39

以下这篇文章是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);
阅读(2948) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~