C/C++中ASCII与Unicode字符串相互转换

您所在的位置:网站首页 wcstombs_s函数 C/C++中ASCII与Unicode字符串相互转换

C/C++中ASCII与Unicode字符串相互转换

2024-03-02 03:09| 来源: 网络整理| 查看: 265

1、ASCII to Unicode

函数:wcstombs(VC6)、wcstombs_s

实例:

// crt_wcstombs_s.c // This example converts a wide character // string to a multibyte character string. #include #include #include

#define BUFFER_SIZE 100

int main( void ) {     size_t   i;     char      *pMBBuffer = (char *)malloc( BUFFER_SIZE );     wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

    // Conversion     wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE,                pWCBuffer, (size_t)BUFFER_SIZE );

    // Output     printf("   Characters converted: %u\n", i);     printf("    Multibyte character: %s\n\n",      pMBBuffer );

    // Free multibyte character buffer     if (pMBBuffer)     {     free(pMBBuffer);     } }

 

2、Unicode to ASCII

函数:mbstowcs

 

// crt_mbstowcs.c // compile with: /W3 // illustrates the behavior of the mbstowcs function

#include #include #include

int main( void ) {     size_t size;     int nChar = 2; // number of characters to convert     int requiredSize;

    unsigned char    *pmbnull  = NULL;     unsigned char    *pmbhello = NULL;     char* localeInfo;         wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters     wchar_t *pwc;

    /* Enable the Japanese locale and codepage */     localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");     printf("Locale information set to %s\n", localeInfo);         printf( "Convert to multibyte string:\n" );

    requiredSize = wcstombs( NULL, pwchello, 0); // C4996     // Note: wcstombs is deprecated; consider using wcstombs_s     printf("  Required Size: %d\n", requiredSize);

    /* Add one to leave room for the null terminator. */     pmbhello = (unsigned char *)malloc( requiredSize + 1);     if (! pmbhello)     {         printf("Memory allocation failure.\n");         return 1;     }     size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996     // Note: wcstombs is deprecated; consider using wcstombs_s     if (size == (size_t) (-1))     {         printf("Couldn't convert string. Code page 932 may"                 " not be available.\n");         return 1;     }     printf( "  Number of bytes written to multibyte string: %u\n",             (unsigned int) size );     printf( "  Hex values of the " );     printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",             pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );     printf( "  Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");

    printf( "Convert back to wide-character string:\n" );

    /* Assume we don't know the length of the multibyte string.      Get the required size in characters, and allocate enough space. */

    requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996     /* Add one to leave room for the NULL terminator */     pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));     if (! pwc)     {         printf("Memory allocation failure.\n");         return 1;     }     size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996     if (size == (size_t) (-1))     {        printf("Couldn't convert string--invalid multibyte character.\n");     }     printf( "  Characters converted: %u\n", (unsigned int)size );     printf( "  Hex value of first 2" );     printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );     free(pwc);     free(pmbhello); }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3