「if処理が複雑になる場合 mappingで解決する」(C.C.より)

という常識。

/* それなりに見れる文字にする */
char *dumpchar( unsigned char byte )
{
    static char tmp[8] = {0};

    // 8bit Ascii
    if( byte >= 0x80 )
    {
        byte -= 0x80;
        if( byte < ' ' )
            sprintf( tmp,"%c%c", '^' , byte + 0x40 );
        else
            sprintf( tmp,"%c%c", ' ' , byte );
    } else {
        if( byte < ' ' )
            sprintf( tmp,"%c%c", '-' , byte + 0x40 );
        else
            sprintf( tmp,"%c%c", '#' , byte );
    }
    
    return tmp;
}

はい、複雑ですね('A`)
if 文が入り組んでいて ややこしいですねー
読めませんねー

/* それなりに見れる文字にする */
char *dumpchar( unsigned char byte )
{
    static char tmp[8] = {0};

    char mark[2][2] = {
    /*  普通の文字 コントロールコード   */
         ' ',      '^',    /* 0x00 */
         '#',      '-',    /* 0x80 */
    };

    unsigned char mask[2][2] = {
    /*  普通の文字 コントロールコード   */
        0x00,      +0x40,        /* 0x00 */
       -0x80,      -0x80+0x40,   /* 0x80 */
    };

    sprintf( tmp,"%c%c", 
               mark[(byte >= 0x80)][((byte & ~0xFF80) < ' ')], 
        byte + mask[(byte >= 0x80)][((byte & ~0xFF80) < ' ')]
    );

    return tmp;
}

C.C. 読んでるかいないかだけでこれだけ変わるもんです。
さあみんなC.C.読もう(ぇ