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 |