2-Windows程序设计 -Unicode
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; }