VC++ 関連情報サンプルコードダンプ結果を CString につめるサンプル#code c++ #include <afx.h> #define DUMP_LENGTH 16 // 1行に表示するバイト数 CString DumpHex2String ( const char* pPos, // [i] 走査開始位置 const char* pEnd // [i] 走査終了位置 ) { CString strResult;
CString strHex;
for( int i = 0; i < DUMP_LENGTH; i++ )
{
if( (pPos + i) < pEnd )
{
strHex.Format( _T("%02X "), (unsigned char)*(pPos + i) );
}
else
{
strHex = _T(" ");
}
strResult += strHex;
}
return strResult;
} CString DumpChr2String ( const char* pPos, // [i] 走査開始位置 const char* pEnd // [i] 走査終了位置 ) { CString strResult;
CString strChr;
for( int i = 0; i < DUMP_LENGTH; i++ )
{
if( ( (pPos + i) < pEnd ) && !iscntrl( *(pPos + i) ) )
{
strChr.Format( _T("%c"), *(pPos + i) );
}
else
{
strChr = _T(" ");
}
strResult += strChr;
}
return strResult;
} CString Dump2String( const char* p, size_t nSize ) { CString strResult;
strResult += _T("ADDRESS : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF\n");
strResult += _T("---------+-----------------------------------------------------------------\n" );
int nAddress = 0;
const char* pPos = p;
const char* pEnd = pPos + nSize - 1;
int length = 0;
CString strTmp;
while( ( pPos += length ) < pEnd )
{
strTmp.Format( _T("%08X : "), nAddress ); // アドレス表示
strResult += strTmp;
length = pEnd - pPos;
if( length >= DUMP_LENGTH )
{
length = DUMP_LENGTH;
}
strResult += DumpHex2String( pPos, pPos + length + 1 ); // Hex 表示
strResult += DumpChr2String( pPos, pPos + length + 1 ); // Char表示
strResult += _T("\n");
nAddress += DUMP_LENGTH;
}
return strResult; } int main( int argc, char* argv[] ) { char szData[] = _T("abc");
CString strDump;
strDump = Dump2String( szData, sizeof(szData) );
_tprintf( _T("%s"), (LPCTSTR)strDump );
return 0;
} #end |