封装多字节与宽字节之间转换函数

    科技2022-07-13  134

    封装多字节与宽字节之间转换函数

    在windows平台下,大多数编译器默认为多字节,但仍然有需要用到宽字节的时候,此时需要注意多字节与宽字节之间转换的问题,否则中文会乱码

    #pragma once #include<windows.h> /*需要使用的转换码 CP_UTF8: 使用UTF-8转换 CP_ACP: ANSI字符集 CP_THREAD_ACP: ANSI字符集; */ /*--------------------------------------------------------------------------------------*/ LPWSTR Multibyte_TO_Widebyte(LPCSTR m_achar,UINT CodePage= CP_UTF8) { int len = MultiByteToWideChar(CodePage, 0, m_achar, strlen(m_achar), NULL, 0); LPWSTR m_wchar = new WCHAR[len + 1]; if (m_wchar != NULL) {//防止new失败的情况 MultiByteToWideChar(CodePage, 0, m_achar, strlen(m_achar), m_wchar, len); m_wchar[len] = '\0'; return m_wchar; } return m_wchar; } /*--------------------------------------------------------------------------------------*/ LPSTR Widebyte_TO_Multibyte(LPCWSTR m_wchar,UINT CodePage= CP_ACP) { int len = WideCharToMultiByte(CodePage, 0, m_wchar, wcslen(m_wchar), NULL, 0, NULL, NULL); LPSTR m_achar = new CHAR[len + 1]; if (m_achar != NULL) {//防止new失败的情况 WideCharToMultiByte(CodePage, 0, m_wchar, wcslen(m_wchar), m_achar, len, NULL, NULL); m_achar[len] = '\0'; return m_achar; } return m_achar; }

    原理: MultiByteToWideChar()函数先计算多字节字符串m_achar的大小,然后再用new出来的m_wchar接收MultiByteToWideChar()转换后的宽字节字符串。 Widebyte_TO_Multibyte()同理


    Processed: 0.015, SQL: 8