2-Windows程序设计第五版 -Unicode 和 宽字符

  Unicode字符集和ASCII码字符集

    2-Windows程序设计第五版 -Unicode 和 宽字符

 

              2-Windows程序设计第五版 -Unicode 和 宽字符

 

 

    下面是代码示例: 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);
}

                  2-Windows程序设计第五版 -Unicode 和 宽字符

 

                  2-Windows程序设计第五版 -Unicode 和 宽字符

 

     程序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;
}

 

上一篇:【GO】变量类型及定义


下一篇:字符编码