char* szShiftJis = "雨にも負けず、風にも負けず。";
char bufUTF8[MAX_PATH];
char bufShiftJis[MAX_PATH];
void ShiftJisToUTF8()
{
wchar_t bufUnicode[MAX_PATH];
// まずUniocdeに変換する
// サイズを計算する
int iLenUnicode = MultiByteToWideChar(CP_ACP, 0, szShiftJis, strlen(szShiftJis)+1,
NULL, 0);
if (iLenUnicode <= sizeof(bufUnicode)/sizeof(bufUnicode[0]))
{
MultiByteToWideChar(CP_ACP, 0, szShiftJis, strlen(szShiftJis)+1, bufUnicode, MAX_PATH);
// 次に、UniocdeからUTF8に変換する
// サイズを計算する
int iLenUtf8 = WideCharToMultiByte(CP_UTF8, 0, bufUnicode, iLenUnicode, NULL, 0,
NULL, NULL);
if (iLenUtf8 <= sizeof(bufUTF8))
{
WideCharToMultiByte(CP_UTF8, 0, bufUnicode, iLenUnicode, bufUTF8, sizeof(bufUTF8),
NULL, NULL);
}
}
}
void UTF8ToShiftJis()
{
wchar_t bufUnicode[MAX_PATH];
// まずUniocdeに変換する
// サイズを計算する
int iLenUnicode = MultiByteToWideChar(CP_UTF8, 0, bufUTF8, strlen(bufUTF8)+1, NULL, 0);
if (iLenUnicode <= sizeof(bufUnicode)/sizeof(bufUnicode[0]))
{
MultiByteToWideChar(CP_UTF8, 0, bufUTF8, strlen(bufUTF8)+1, bufUnicode, MAX_PATH);
// 次に、UniocdeからShiftJisに変換する
// サイズを計算する
int iLenUtf8 = WideCharToMultiByte(CP_ACP, 0, bufUnicode, iLenUnicode, NULL, 0,
NULL, NULL);
if (iLenUtf8 <= sizeof(bufUTF8))
{
WideCharToMultiByte(CP_ACP, 0,
bufUnicode, iLenUnicode,
bufShiftJis, sizeof(bufShiftJis),
NULL, NULL);
}
}
}
ネタ元