내가 귀찮아서 올려두는 코드이다. 코드가 진짜 마음에 안든다.
#pragma once
#include <windows.h>
#include <math.h>
LPWSTR AnsiToUnicode(LPSTR szAnsi)
{
LPWSTR szUniStr;
// 유니코드로 변환 전 return 되는 길이얻기
int nLen = MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, NULL, NULL);
nLen = nLen * sizeof(WCHAR);
szUniStr = (LPWSTR)malloc(nLen + 1);// 메모리를 할당한다.
memset(szUniStr, 0, nLen + 1);
// 이제 변환을 수행한다.
MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, szUniStr, nLen);
return szUniStr;
}
//유니코드에서 ANSI 문자열로 변환
int UnicodeToAnsi(LPWSTR szUniStr, char* output)
{
int nLen = WideCharToMultiByte(CP_ACP, 0, szUniStr, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, szUniStr, -1, output, nLen, NULL, NULL);
return 0;
}
//유니코드에서 UTF8 문자열로 변환
LPWSTR UnicodeToUTF8(LPWSTR szUniStr)
{
int idx = 0;
WCHAR uc;
LPWSTR szUtf8;
int nLen = sizeof(WCHAR) * wcslen(szUniStr);
nLen = nLen * 3 + sizeof(WCHAR); //최대 값
szUtf8 = (LPWSTR)malloc(nLen);
memset(szUtf8, 0, nLen);
LPSTR pszUTF8 = (LPSTR)szUtf8;
for (int i = 0; szUniStr[i]; i++){
uc = szUniStr[i];
if (uc <= 0x7f){
pszUTF8[idx++] = (char)uc;
}
else if (uc <= 0x7ff){
pszUTF8[idx++] = (char)0xc0 + uc / (wchar_t)2<<6;
pszUTF8[idx++] = (char)0x80 + uc % (wchar_t)2<<6;
}
else if (uc <= 0xffff){
pszUTF8[idx++] = (char)0xe0 + uc / (wchar_t)2<<12;
pszUTF8[idx++] = (char)0x80 + uc / (wchar_t)2<<6 % (wchar_t)2<<6;
pszUTF8[idx++] = (char)0x80 + uc % (wchar_t)2<<6;
}
}
return szUtf8;
}
//유니코드에서 UTF8 문자열로 변환
int UTF8ToUnicode(LPWSTR szUtf8, LPWSTR output)
{
int nLen = sizeof(WCHAR) * wcslen(szUtf8);
nLen = nLen + sizeof(WCHAR);
LPSTR src = (LPSTR)szUtf8;
int p = 0;
int q = 0;
WCHAR d;
while (src[p]){
if ((src[p] & 0xE0) == 0xE0){
d = ((src[p] & 0x0f) << 12) | ((src[p + 1] & 0x3F) << 6) | (src[p + 2] & 0x3F);
p += 3;
}
else if ((src[p] & 0xC0) == 0xC0){ d = ((src[p] & 0x1F) << 6) | (src[p + 1] & 0x3F);
p += 2;
}
else{ d = src[p] & 0x7F;
p++;
}
output[q] = d;
q++;
}
output[q] = NULL;
return 0;
}
|
cs |
'뻘짓' 카테고리의 다른 글
Direct2D C++ UI 라이브러리 "Foxhop.lib" (1) | 2023.06.06 |
---|---|
[Python] Raw소켓으로 Ping 보내기 (ICMP 스캐너) (0) | 2022.08.05 |
디스어셈블 라이브러리 "Capstone" 빌드 및 사용법 (2) | 2022.04.28 |
Windows에서 FFmpeg 빌드하기 (빌드된 파일 첨부) (1) | 2022.02.08 |
[짧은글] 블루투스 페어링 : sspmode 0 (0) | 2021.12.10 |