zoukankan      html  css  js  c++  java
  • dowhile(0)的妙用及MultiByteToWideChar和WideCharToMultiByte的用法

    需求:屏幕上显示字体的时候,若字数过多需要分行显示(分2行),第一行和第二行各占一半的字符。

    由于带显示的字符串为const char* pText = "..."; 

    其中包含有中文,标点符号,英文,数字等等,其中中文用2个字节来表示,其他用1个字节表示。若直接根据这个字符的长度分隔成2部分的话有可能会出现乱码,所以需要转换成宽字节字符后在分割。

     1 int main()
    2 {
    3 const char* pText = "hello, 小楼一夜听春雨,小楼一夜听春雨,小楼一夜听春雨!";
    4 string str1, str2;
    5
    6 wchar_t* pWideStr = NULL;
    7 char* pMultiStr1 = NULL;
    8 char* pMultiStr2 = NULL;
    9
    10 do
    11 {
    12 // param@5--指向接收被转换字符串的缓冲区
    13 // param@6--指定由第5个参数指向的缓冲区的字符个数。
    14 // 若此值为零,函数返回缓冲区所必需的宽字符数,第5个参数不用传NULL
    15 DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, pText, -1, NULL, 0);
    16 pWideStr = new wchar_t[dwNum];
    17 if(!pWideStr)
    18 break;
    19
    20 MultiByteToWideChar (CP_ACP, 0, pText, -1, pWideStr, dwNum);
    21
    22 wstring wstr(pWideStr);
    23 wstring wstr1 = wstr.substr(0, wstr.size() / 2);
    24 wstring wstr2 = wstr.substr(wstr.size() / 2, wstr.size() - wstr.size() / 2);
    25
    26 // param@3--指向将被转换的unicode字符串。
    27 // param@4--指定由第3个参数指向的缓冲区的字符个数。如果这个值为-1,
    28 // 字符串将被设定为以NULL为结束符的字符串,并且自动计算长度。
    29 // param@5--指向接收被转换字符串的缓冲区。
    30 // param@6--指定由参数lpMultiByteStr指向的缓冲区最大值(用字节来计量)。
    31 // 若此值为零,函数返回lpMultiByteStr指向的目标缓冲区所必需的字节数,
    32 // 在这种情况下,第5个参数通常为NULL。
    33 dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wstr1.c_str(), -1, NULL, 0, NULL, FALSE);
    34 pMultiStr1 = new char[dwNum];
    35 if (!pMultiStr1)
    36 break;
    37 WideCharToMultiByte(CP_OEMCP, NULL, wstr1.c_str(), -1, pMultiStr1, dwNum, NULL, FALSE);
    38 str1 = pMultiStr1;
    39
    40 dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wstr2.c_str(), -1, NULL, 0, NULL, FALSE);
    41 pMultiStr2 = new char[dwNum];
    42 if (!pMultiStr2)
    43 break;
    44 WideCharToMultiByte(CP_OEMCP, NULL, wstr2.c_str(), -1, pMultiStr2, dwNum, NULL, FALSE);
    45 str2 = pMultiStr2;
    46
    47 } while (0);
    48
    49 if (pWideStr)
    50 delete [] pWideStr;
    51 if (pMultiStr1)
    52 delete [] pMultiStr1;
    53 if (pMultiStr2)
    54 delete [] pMultiStr2;
    55
    56 cout<<pText<<endl;
    57 cout<<str1<<endl;
    58 cout<<str2<<endl;
    59
    60 return 0;
    61 }



  • 相关阅读:
    【Codeforces Round】 #431 (Div. 2) 题解
    最强大脑 题解
    Game02 最新版本2.0.0
    如何移除Chrome浏览器让人不爽的GoogleUpdate.exe后台更新进程
    VS2010常用插件介绍
    悲催-在当当网买书买到盗版
    优化Angular应用的性能
    纯js实现自定义模态框
    AngularJS方法 —— angular.bind
    Angular
  • 原文地址:https://www.cnblogs.com/kex1n/p/2279323.html
Copyright © 2011-2022 走看看