String manipulation in C++ an example of wide and narrow character conversion

  • 2020-05-30 20:46:29
  • OfStack

String manipulation in C++ - an example of wide and narrow character conversion

MultiByteToWideChar


 int MultiByteToWideChar(
  _In_   UINT  CodePage,
  _In_   DWORD dwFlags,
  _In_   LPCSTR lpMultiByteStr,
  _In_   int  cbMultiByte,
  _Out_opt_ LPWSTR lpWideCharStr,
  _In_   int  cchWideChar
 );
  Parameter description: 
  CodePage Commonly used: CP_ACP , CP_UTF8
  dwFlags : 0
  lpMultiByteStr [in] : 
     Points to the string to be converted. 
  cbMultiByte [in] : 
    lpMultiByteStr " In bytes " The size of the. 
     Set up the  0 , the function fails; 
     Set up the  -1 , the function handles the entire string, including \0 String, resulting in a wide string with \0 The length returned is also included \0 The length of the; 
     Set up the  >0 , depending on whether it is included \0 , the result returned will be adjusted accordingly. 
  lpWideCharStr [out, optional] : 
     Points to the buffer that receives the wide string. 
  cchWideChar [in] : 
    lpWideCharStr  Pointing buffer " Calculated in character size " The size of the. 
     Set up the  0 To make  lpWideCharStr  Invalid and causes the function to return what is required " Calculated in character size " The size of the. 

Code:


 int requiredBufSize = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0);
 if (requiredBufSize > 0)
 {
   WCHAR *pBuffer = new WCHAR[requiredBufSize];
   MultiByteToWideChar(CP_ACP, 0, src, -1, pBuffer, requiredBufSize);
 }

WideCharToMultiByte


 int WideCharToMultiByte(
  _In_   UINT  CodePage,
  _In_   DWORD  dwFlags,
  _In_   LPCWSTR lpWideCharStr,
  _In_   int   cchWideChar,
  _Out_opt_ LPSTR  lpMultiByteStr,
  _In_   int   cbMultiByte,
  _In_opt_ LPCSTR lpDefaultChar,
  _Out_opt_ LPBOOL lpUsedDefaultChar
 );
  Parameter description: 
  lpDefaultChar [in, optional] : NULL
  lpUsedDefaultChar [out, optional] : NULL
   Other parameters reference  MultiByteToWideChar

Code:


 int requiredBufSize = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL);
 if (requiredBufSize > 0)
 {
   char *pBuffer = new char[requiredBufSize];
   WideCharToMultiByte(CP_ACP, 0, src, -1, pBuffer, requiredBufSize, NULL, NULL);
 }

If you have any questions, please leave a message or come to the site community to exchange discussion, thank you for reading, hope to help you, thank you for your support of the site!


Related articles: