2012-09-16 102 views
0

第二天試圖從字節值由0x40的字節十六進制的NSString與縮放0x40的字節

我試圖擺脫的Logic Pro/Mackie Control上的十六進制值換算的字符。

邏輯發給我0xE,這表示這是'n'。如果它向我發送'4e',這意味着我應該在顯示屏上畫'n'。 (只需在最後加點)。

以下是將char轉換爲字節的公式。請幫我做反之亦然公式。

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); 

我也發現下面的代碼(這似乎沒有禮帽()):

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

我怎樣才能扭轉這種局面?我知道麥基使用這段代碼從char構建十六進制。但我需要反過來,是從十六進制得到char。

+0

你有一堆東西在那裏錯了。如果傳入的值不是UTF8字符,則不應該執行'toUpper' - 它只是簡單地處理數據。您應該屏蔽掉40位(與0xBF),然後添加0x40以獲得您的基本角色(之後如果您願意,可以對其進行操作)。並用0x40原始字符來測試'.'指示。 –

+0

這不是我正在做的。這是原始的Mackie代碼。我只需要將dex轉換爲char。我知道麥基似乎使用這個公式。 – user1195202

+0

有些地方你必須找到規格。在我看來,你所擁有的可能是將ASCII轉換爲7段的代碼,而不是其他方式。這是沒有意義的'('。'=='。'?0x40:0x00)' - 它總是計算爲0x40。 –

回答

1

好的,我看到你添加了關於想要反轉序列的註釋。如果是這樣的話,這很簡單:

BOOL haveDot = (the7Segment & 0x40) != 0; 
char temp = the7Segment & 0xBF; 
char theChar = (temp > 0x21) ? temp : (temp + 0x40); 
+0

謝謝,我會試試這個。 – user1195202