SDL_Helper作った

この記事はKogakuin Univ Advent Calendar 2020 – Adventarの6日目です。

俺のAPEXの時間を返せAdventCalender許さん

はじめに

SDLで普段自分で使うようなテンプレートをGithubに公開しました。リポジトリを見ればわかりますがまだカレンダーに出せるようなレベルではありません。なんかうまい感じにRendererとかWindow隠せるようにアップデートしていくのでよろしくお願いします。

あれ?書くことなくね。そうだ、苦労した点を話そうということで話して行きます。

苦労したこと

文字コードです。TTFはUTF8にしか対応していないのでWindowsだとバグり散らかして大変でした。WindowsAPIを使って変換の為に以下の関数を用意しました。

std::string SjistoUTF8(std::string Sjis)//Change UTF8
{
	//UTF16へ変換後の文字列長を得る
	int lenghtUTF16 = MultiByteToWideChar(CP_THREAD_ACP, 0, Sjis.c_str(), Sjis.size() + 1, NULL, 0);

	//必要な分だけUnicode文字列のバッファを確保
	wchar_t* bufUnicode = new wchar_t[lenghtUTF16];

	//ShiftJISからUnicodeへ変換
	MultiByteToWideChar(CP_THREAD_ACP, 0, Sjis.c_str(),Sjis.size() + 1, bufUnicode, lenghtUTF16);

	//UTF8へ変換後の文字列長を得る
	int lengthUTF8 = WideCharToMultiByte(CP_UTF8, 0, bufUnicode, -1, NULL, 0, NULL, NULL);

	//必要な分だけUTF8文字列のバッファを確保
	char* bufUTF8 = new char[lengthUTF8];

	//UTF16からUTF8へ変換
	WideCharToMultiByte(CP_UTF8, 0, bufUnicode, lenghtUTF16 - 1, bufUTF8, lengthUTF8, NULL, NULL);

	std::string UTF8(bufUTF8);

	delete[lenghtUTF16] bufUnicode;
	delete[lengthUTF8] bufUTF8;

	return UTF8;
}

わざわざ一回16に変換した後に8に変換しました。一発で変換できる奴C++にはないのが面倒くさかった。

終わりに

AdventCalender、キツすぎる。みんなも空いてる日に入れてくれよな….

コメント

タイトルとURLをコピーしました