跳至主要內容

StringUtils

chanchaw大约 1 分钟cpp

源码

初次为制作多字节字符和宽字符互相转换而创建

/*
 2024年3月25日 10:56:50 使用 windows api 制作多字节字符串转换宽字符、宽字符转多字节
*/
#include <windows.h>
#include <iostream>

// 宽字符转多字节字符串
char* Wide2Mult(wchar_t* ws) {
	// 宽字符 ws 转换多字节字符串后的长度
	int bufSize = WideCharToMultiByte(CP_ACP, NULL, ws, -1, NULL, 0, NULL, FALSE);
	char *sp = new char[bufSize];
	WideCharToMultiByte(CP_ACP, NULL, ws, -1, sp, bufSize, NULL, FALSE);
	return sp;
}

char* Wide2Mult(const wchar_t* ws) {
	// 宽字符 ws 转换多字节字符串后的长度
	int bufSize = WideCharToMultiByte(CP_ACP, NULL, ws, -1, NULL, 0, NULL, FALSE);
	char *sp = new char[bufSize];
	WideCharToMultiByte(CP_ACP, NULL, ws, -1, sp, bufSize, NULL, FALSE);
	return sp;
}

// 多字节字符串转宽字符
wchar_t* Mult2Wide(char* ms) {
	// 多字节字符串转换宽字符后的长度
	int bufSize = MultiByteToWideChar(CP_ACP, 0, ms, -1, NULL, 0);
	wchar_t* wp = new wchar_t[bufSize];
	MultiByteToWideChar(CP_ACP, 0, ms, -1, wp, bufSize);
	return wp;
}

wchar_t* Mult2Wide(const char* ms) {
	// 多字节字符串转换宽字符后的长度
	int bufSize = MultiByteToWideChar(CP_ACP, 0, ms, -1, NULL, 0);
	wchar_t* wp = new wchar_t[bufSize];
	MultiByteToWideChar(CP_ACP, 0, ms, -1, wp, bufSize);
	return wp;
}

/*
调用案例
void TestMult2WideWindowsAPI() {
	// 将宽字符转换为做字节字符串
	const wchar_t* wideStr = L"测试宽字符串abc123中国";
	char* convertedMultStr = Wide2Mult(wideStr);
	printf("从宽字符转换来的多字节字符串:%s\n", convertedMultStr);

	// 将多字节字符串转换为宽字符
	const char* oriMultStr = "我原本就是多字节abc123字符串";
	wchar_t* convertedWideStr = Mult2Wide(oriMultStr);
	setlocale(LC_ALL, "chs");// 打印宽字符之前要设定好字符集
	wprintf_s(L"从多字节转换来的宽字符:%s\n", convertedWideStr);
}
 */