C++中的TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR以及代码实现

607 阅读1分钟

在这篇文章中,我们将学习C++中的TCHAR、WCHAR、LPSTR、LPWSTR、LPCTSTR以及代码实例。

通常,1个或2个字节可以用来表示一个字符。ANSI标准是1个字节的大小,用来表示所有的英文字符。
世界上所有的语言都由Unicode表示,它的大小是2个字节的。

Visual C++编译器支持TCHAR、WCHAR、LPSTR、LPWSTR、LPCTSTR来表示ANSI和Unicode字符。

TCHAR

TCHAR用于描述ANSI或Unicode字符串。char的类型用缩写TCHAR来表示。所有编程语言都支持Unicode的编码。TCHAR代表ASCII或多字节字符中的char,它分配1个字节,而在Unicode中它表示WCHAR,分配两个字节。

语法

Typedef char TCHAR;

它通常是这样定义的:

#ifndef _UNICODE
typedef char TCHAR;
#else
typedef wchar_t TCHAR;
#endif

WCHAR

包含16位Unicode字符的Windows数据类型,其缩写为WCHAR。也被称为wchar_t类型。

语法

Typedef char TCHAR;

它通常是这样定义的:

#if !defined(_NATIVE_WCHAR_T_DEFINED)
   typedef unsigned short WCHAR;
   #else
   typedef wchar_t WCHAR;
   #endif

程序代码

 //wchar implementation in cpp
#include <iostream>
#include<cwchar>
using namespace std;
//main code
int main()
{
	wchar_t string1[] = L"Hello" ;
	wchar_t string2[] = L"world" ;
    //concat stirng 
	wcscat(string1, string2);
    //display string
	wcout << L"STRING  = "
		<< string1 << endl;
	return 0;
}

输出

STRING : Hello world

LPSTR

LPSTR是长指针字符串,它是char *或wchar_t *,取决于是否定义了uopn uncicod,其中LP代表长指针,
STR代表字符串。LPSTR表示CHAR或长指针常数的空尾字符串。

语法

typedef const char* LPSTR;

程序代码

#include<iostream>
#include<Windows.h>
using namespace std;
main()
{
   string str1 = "Welcome";
   LPSTR str2 = new TCHAR[str1.size() + 1]; 
   //copy string
   strcpy(str2, str1.c_str());
   cout << "String 1 : " << str1 <<endl;
   cout << "Copy String : " << str2 <<endl;
}

输出

String 1 : Welcome
Copy String : Welcome

LPWSTR

LPWSTR是一个指向16位Unicode字符串的32位指针。它可以用空字符来结束。换句话说,它是空结束的WCHAR类型的字符串或长指针wchar类型的字符串。

语法

typedef const char* LPWSTR;
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
    LPWSTR str1 = L"Hello ";
    LPWSTR str2 = L"World";

    wstring w1(str1);
    wstring w2(str2);
    wstring w3 = w1+w2;
    wcout << w3 << endl;
}

输出

Hello World

LPCSTR

LPCSTR是一个32位的指针,指向一个由8位Windows(ANSI)字符组成的恒定的空尾字符串。换句话说,它是一个简单的字符串,是由微软.NET定义的。要声明这个数据类型,用户必须在我们的程序中包含windows.h头文件。

LP代表长指针,C代表常数。STR代表字符串

语法

typedef const char* LPCSTR;

LPCSTR表示CHAR或Long Pointer Constant的空尾常数字符串。

程序代码

#include<iostream>
#include<Windows.h>
using namespace std;
main()
{
   wstring str1 = L"Hello World";
   LPCSTR str2 ;
   //copy string
   str2 = str1.c_str();
   wcout << "String 1 : " << str1 <<endl;
   wcout << "String 2 : " << str2 <<endl;
}

输出

String 1 : Hello World
String 2 : Hello World