#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 再次調用函數,並將分配的空間傳遞給
函數,獲取結果.