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

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

在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()同理


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值