ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-11-22 01:03:58  阅读:193  来源: 互联网

标签:MB Windows TEXT 字符集 szBuffer int 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;
}

 

标签:MB,Windows,TEXT,字符集,szBuffer,int,Unicode,第五版
来源: https://www.cnblogs.com/httpcc/p/15586716.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有