わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

UTF32をUTF16に変換する

UTF32をUTF16に変換します。0x10000以上のコードはサロゲートペアとして変換します。

#include <stdio.h>
#include <tchar.h>
#include <locale.h>
#include <iostream>
#include <windows.h>



/*
	UTF32をUTF16に変換する
*/
std::wstring UTF32toUTF16
(
	ULONG qUtf32	// UTF32コード
)
{
	WCHAR waBuf[ 4 ] = { 0 };

	if ( 0x10000 > qUtf32 ) {

		// 0x10000未満
		waBuf[ 0 ] = (WCHAR)qUtf32;
	}
	else {

		// 0x10000以上(サロゲートペアにする)
		waBuf[ 0 ] = (WCHAR)( ( qUtf32 - 0x10000 ) / 0x400 + 0xd800 );
		waBuf[ 1 ] = (WCHAR)( ( qUtf32 - 0x10000 ) % 0x400 + 0xdc00 );
	}

	// 処理結果を返す
	return( waBuf );
}



/*
	UTF32をUTF16に変換する
*/
int _tmain
(
	  int argc
	, _TCHAR* argv[]
)
{
	// std::wcoutのロケールを設定
	std::wcout.imbue( std::locale( "", std::locale::ctype ) );

	// UTF16変換結果
	std::wstring strUtf16;

	// UTF32をUTF16に変換する
	strUtf16 += UTF32toUTF16( 0x00002605 );
	strUtf16 += UTF32toUTF16( 0x00020628 );
	strUtf16 += UTF32toUTF16( 0x0001f300 );

	// 結果表示
	for ( UINT nI = 0; nI < strUtf16.size(); nI++ ) {
		wprintf( L"[%d] -> 0x%04x¥n", nI, strUtf16[ nI ] );
	}

	// 処理結果を返す
	return( 0 );
}



実行結果

[0] -> 0x2605
[1] -> 0xd841
[2] -> 0xde28
[3] -> 0xd83c
[4] -> 0xdf00






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。