Unicode字符集和ASCII碼字符集
下面是程式碼示例: ASCII碼字符集 Unicode字符集 通用版本字符集
程式1
#include <stdio.h> #include <stdlib.h> #include <wchar.h> #include <locale.h> #include <tchar.h> /* ASCII碼字符集 雙位元組字符集 多位元組字符集 */ //int main() //{ // char c = 'A'; //char是一個位元組 // char *str = "日本"; //不推薦使用,容易發生亂碼,實際上還是ASCII字元 // int i; // i = strlen(str); // printf("%c\n", c); // printf("%s\n", str); // printf("%d\n", i); // return 0; //} /* Unicode寬字符集 */ //int main() //{ // wchar_t c = L'中'; //寬字元,Unicode,兩個位元組 // wchar_t str[] =L"中國"; // int i; // setlocale(LC_ALL,"chs"); //若是Unicode必須設定本地區域語言中文 // i = wcslen(str); // wprintf(L"%lc\n", c); // wprintf(L"%ls\n", str); // wprintf(L"%d\n", i); //} //通用的型別、函式 int main() { //char c; //wchar_t c; //CHAR c; //WCHAR c; TCHAR str[] = _T("印度"); //setlocale(LC_ALL, "chs"); //若是Unicode字符集必須設定本地區域語言中文 _tprintf(_TEXT("%s\n"), str); return 0; }
程式2 windows 通用函式
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInsance, PSTR szCmdLine, int iCmdShow) { TCHAR *content= TEXT("hello 通用 中國 tchar"); TCHAR *title = TEXT("標題 通用 中國 tchar"); MessageBoxA(NULL, "hello ASCII 中國", "ASCII 標題", MB_YESNO | MB_ICONINFORMATION); MessageBoxW(NULL, L"hello Unicode 中國", L"Unicode 標題", MB_YESNO | MB_ICONINFORMATION); MessageBox(NULL, TEXT("hello 通用 中國"), TEXT("通用 標題"), MB_YESNO | MB_ICONINFORMATION); MessageBox(NULL, content, title, MB_YESNO | MB_ICONINFORMATION); }
程式3 C語言標準函式
#include <stdio.h> #include <stdarg.h> int my_printf(const char *szFormat, ...) { int iReturn; va_list pArgs; // 標頭檔案定義 typedef char* va_list; va_start(pArgs, szFormat); //指向 szFormat 的下一個引數 //返回值 傳入的元素的個數 iReturn = vprintf(szFormat, pArgs); //pArgs 指向陣列的第一個指標 va_end(pArgs); return iReturn; } //標準的C int main() { int i = 1; char szBuffer[100]; int x=100, y=200, z=300; //會呼叫vprintf printf("hello = %d,%d,%d\n", x, y, z); //傳入的引數是靈活多變的,上面的函式模仿 my_printf("%d,%d\n", x, y); sprintf(szBuffer, "不安全的Hello %d\n", i); //如果存的值很大就會佔用後面的記憶體區 printf(szBuffer); _snprintf(szBuffer, 100, "安全的Hello %d\n", i); //擷取到50後就不在使用 puts(szBuffer); printf("hello %d\n", i); return 0; }
程式4 windows函式
#include <windows.h> #include <stdio.h> #include <tchar.h> #include <locale.h> //最後一個程式 使用 Unicode 字符集 顯示亂碼,未找到原因。 //ASCII字符集 版本 //int WINAPI WinMain(HINSTANCE hInstance, // HINSTANCE hPrevInstance, // PSTR szCmdLine, // int iCmdShow // ) //{ // int i = 5; // char szBuffer[50]; // // //sprintf(szBuffer, "Hello %d\n", i); //不安全標準的C語言函式,無法處理Unicode字符集 // _snprintf(szBuffer,50, "安全的:Hello %d\n", i); //安全標準的C語言函式,無法處理Unicode字符集 // // MessageBoxA(NULL, szBuffer, "ASCII版本", MB_YESNO | MB_ICONINFORMATION); // return 0; //} //Unicode字符集 版本 //int WINAPI WinMain(HINSTANCE hInstance, // HINSTANCE hPrevInstance, // PSTR szCmdLine, // int iCmdShow // ) //{ // int i = 5; // wchar_t szBuffer[50]; //WCHAR // // //swprintf(szBuffer,50, L"Hello %d\n", i); //不安全 // _snwprintf(szBuffer, 50, L"安全的:Hello %d\n", i); //安全的 // // MessageBoxW(NULL, szBuffer, L"Unicode版本", MB_YESNO | MB_ICONINFORMATION); // return 0; //} //通用 版本 //int WINAPI WinMain(HINSTANCE hInstance, // HINSTANCE hPrevInstance, // PSTR szCmdLine, // int iCmdShow // ) //{ // int i = 5; // TCHAR szBuffer[50]; // //// _stprintf(szBuffer, TEXT("Hello %d\n"), i); // _sntprintf(szBuffer,50, TEXT("安全的:Hello %d\n"), i); //安全的 // // MessageBox(NULL, szBuffer, TEXT("通用版本"), MB_YESNO | MB_ICONINFORMATION); // return 0; //} int CDECL MessageBoxPrintf(TCHAR *szCaption,TCHAR *szFormat,...) { TCHAR szBuffer[1024]; //定義字元陣列 va_list pArgList; va_start(pArgList, szFormat); //把szFormat放在szBuffer字元陣列中 _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szFormat, pArgList); va_end(pArgList); return MessageBox(NULL, szBuffer, szCaption,MB_YESNO | MB_ICONINFORMATION); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) { int x = 101,y = 201,z = 301; int cxScreen, cyScreen; cxScreen = GetSystemMetrics(SM_CXSCREEN); //獲取電腦螢幕寬度 cyScreen = GetSystemMetrics(SM_CYSCREEN); //獲取電腦螢幕高度 MessageBoxPrintf(TEXT("標題"), TEXT("Hello %d,%d,%d\n"), x,y,z); MessageBoxPrintf(TEXT("我的螢幕"), TEXT("螢幕寬度:%dpx,高度:%dpx"), cxScreen, cyScreen); return 0; }