0

0x40バイトでスケーリングされたバイト値から文字を取得しようとする2日目

Logic Pro /MackieControlから16進値を取得しようとしています。

ロジックは私に0xEを送信します。これは、これが「n」であることを意味します。「4e」が送信された場合は、ディスプレイ「n」に描画する必要があることを意味します。(最後にドットを追加するだけです)。

これは、charをbyteに変換するための式です。逆の式を作るのを手伝ってください。

char translate_seven_segment( char achar )
{
    achar = toupper( achar );
    if ( achar >= 0x40 && achar <= 0x60 )
        return achar - 0x40;
    else if ( achar >= 0x21 && achar <= 0x3f )
        return achar;
    else
        return 0x00;
}

char s = 'N';
    Byte ad = translate_seven_segment( s ) + ( '.' == '.' ? 0x40 : 0x00 );

私は次のコードも見つけました(これはtopper()なしのようです):

def translate_seven_segment( char )                      
    case char                                       
      when 0x40..0x60                                   
        char - 0x40                                     
      when 0x21..0x3f                                    
        char                                         
      else                                        
        0x00                                         
    end                                        
  end   

どうすれば元に戻すことができますか?mackieがこのコードを使用してcharからhexを構築することを知っています。しかし、その逆が必要です。16進数からcharを取得することです。

4

1 に答える 1

1

OK、シーケンスを逆にしたいというメモを追加したようです。その場合、それはかなり簡単です:

BOOL haveDot = (the7Segment & 0x40) != 0;
char temp = the7Segment & 0xBF;
char theChar = (temp > 0x21) ? temp : (temp + 0x40);
于 2012-09-19T01:19:22.050 に答える