#include "char.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include <windows.h>
void print_ASCII();
void print_codePage(int codePage);
void c_wchar();
void tchar();
int main()
{
c_wchar();
tchar();
//c_char();
//print_codePage(936);
//print_ASCII();
//print_codePage(437);
system("pause");
return 0;
}
void c_char()
{
char *p = "中";
int num = strlen(p);
printf("%s,%d",p,num);
}
void c_wchar()
{
wchar_t Zcx = 'a';
wchar_t * p = L"safda";
int nLen = wcslen(p);
wprintf(L"%c,%s,%d",Zcx,p,nLen); //宽字节输出用wprintf
wchar_t * p2 = L"我是中国人"; //宽字节需要加L
nLen = wcslen(p2);
wprintf(L"%s,%d",p2,nLen);//nLen == 5
char * p3 = "我是中国人";
nLen = strlen(p3);
printf("%s,%d",p3,nLen);//nLen == 10
}
void tchar()
{
TCHAR c = 'a';
//TCHAR *p = _T("wa中国人");
//WORD
byte a = 00;
byte b = 40;
WORD c1 = MAKEWORD(a,b);
printf("%c",c1);
}
void print_ASCII()
{
char nIndex = 0;
for(int i = 1;i<256;i++)
{
printf("%c ",i);
}
}
void print_codePage(int codePage)
{
SetConsoleOutputCP(codePage);
char nIndex = 0;
for(int i = 1;i<256;i++)
{
printf("%c ",i);
}
}
2.2 C语言和编码
2.2.1 单字节的字符和字符串
char cText = 'A';
char * pszText = "ABCD";
2.2.2 宽字节的字符
wchar_t cText = 'A'
wchar_t * pszText = L"ABCD";
2.2.3 相关函数
单字字符的函数,对应有多.宽字节的函数.
strlen wcslen mbslen
printf wprintf
2.2.4 TCHAR
为了程序中可以方便的支持的Unicode和多字节
字符等,所以使用TCHAR来定义字符和字符串.
根据_UNICODE宏开关,会将TCHAR编译成不同字符
类型.
#ifndef _UNICODE
typedef char TCHAR
#define __T(x) x
#else
typedef wchar_t TCHAR
#define __T(x) L##x
#endif
使用时,要增加TCHAR.H头文件支持,使用
_UNICODE 宏开关进行编译
CL window.c /D_UNICODE
#define _UNICODE
#include "tchar.h"
定义方式:
TCAHR * pszText = __T("ABCDEF");
代码使用:使用UNICODE宏开关,通知
编译器选择编译的代码.
#ifndef _UNICODE
int nLen = strlen( pszText );
#else
int nLen = wcslen( pszText );
#endif
2.3.3 字符转换
int WideCharToMultiByte(
UINT CodePage, //代码页
DWORD dwFlags, //转换方式
LPCWSTR lpWideCharStr, //需要被转换WCHAR地址
int cchWideChar, //需要被转换WCHAR的长度
LPSTR lpMultiByteStr,//用于存放转换后的结果BUFF
int cchMultiByte, //BUFF的长度
LPCSTR lpDefaultChar,//使用的缺省字符串的地址
LPBOOL lpUsedDefaultChar //缺省字符串被使用的标识
);
int MultiByteToWideChar(
UINT CodePage,// 代码页
DWORD dwFlags,// 转换方式
LPCSTR lpMultiByteStr, // 需要被转换CHAR地址
int cchMultiByte,//需要被转换CHAR的长度
LPWSTR lpWideCharStr,//用于存放转换后的结果BUFF
int cchWideChar );//BUFF的长度
使用方法:
1 将要转换的字符串,传递给函数,从
返回值中获取转换后字符串的长度。
2 分配字符串空间
3 再次调用函数,并将分配的空间传递给
函数,获取结果.