#contents
*VC++ 関連情報
**サンプルコード
***ダンプ結果を CString につめるサンプル
#ref(dump2string.cpp);

#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS