• 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 }



  • 相关阅读:
    [杭电_HDU] 2013
    动态调整线程数的python爬虫代码分享
    wampserver 配置的几个坑(雾
    wampserver apache 403无权限访问 You don't have permission to access /index.html on this server
    [爬坑日记] 安卓模拟器1903蓝屏 没开hyper-v
    [单片机] ESP8266 开机自动透传
    [操作系统] 死锁预防和死锁避免
    [linux] 手机Deploy linux 桌面中文乱码
    XHTML基础
    JDBC_c3p0连接池
  • 原文地址:https://www.cnblogs.com/kex1n/p/2279323.html
Copyright © 2020-2023  润新知