
int型の数値を16進数の文字列に変換するには、従来からのC/C++ではitoa関数もしくはsprintf関数を利用した。しかしWindowsプログラミングではitoa関数などは使わない方がいい。
もちろんitoa関数も使えるが文字列バッファーサイズを指定できるためセキュリティが若干高い_itoa_s系の関数を利用した方がいい。さらに言うと実際のプログラミングでは速度的には劣るがバッファーのことを考える必要がなくコーディングが楽なCString型の文字列を利用する変換がいいだろう。
_itoa_s系の関数の場合は第4引数に「16」を指定することで16進数の文字列を取得できる。
bool Test()
{
////////////////////////////////
// int型数値を16進数文字列に変換
//
{
//char型文字列に変換
int nValue = 123;
char pszText[256];
//itoaや_itoaは利用しない方がいい!代わりに_itoa_sを使う
::_itoa_s(nValue,pszText,256,16);
::MessageBoxA(NULL,pszText,"",MB_OK);
}
{
//wchar_t型文字列に変換
int nValue = 123;
wchar_t pszText[256];
//_itowは利用しない方がいい!代わりに_itow_sを使う
::_itow_s(nValue,pszText,256,16);
::MessageBoxW(NULL,pszText,L"",MB_OK);
}
{
//TCHAR型文字列に変換
int nValue = 123;
TCHAR pszText[256];
//_itotは利用しない方がいい!代わりに_itot_sを使う
::_itot_s(nValue,pszText,256,16);
::MessageBox(NULL,pszText,_T(""),MB_OK);
}
{
//CString型文字列に変換
int nValue = 123;
CString strText;
//小文字の16進数
strText.Format(_T("%x"),nValue);
::MessageBox(NULL,strText,_T(""),MB_OK);
//大文字の16進数
strText.Format(_T("%X"),nValue);
::MessageBox(NULL,strText,_T(""),MB_OK);
}
return true;
}
