2013-01-16 63 views
0

我有一個枚舉,我想將它的一個值傳遞給一個Objective-C方法,期望直接使用char *而不是創建另一個變量。我該怎麼辦?如何將枚舉轉換爲Objective-C中的字節數組?

例如

typedef enum { value1 = 0xAA, value2 = 0xBB, value3 = 0xCC } myValue; 

NSMutableData *data = [[NSMutableData alloc] init]; 

// want to pass in the enum directly as char * but won't work 

[data appendBytes:(char *){ value1 } length: 1]; 

// this will work, why? and is this the best way? 

[data appendBytes:(char []){ value1 } length: 1]; 
+2

你到底在期待什麼方法來接收?它想要一個char *'。你期望枚舉值最終以'char *'的形式傳遞? –

+0

它表示的字節值。讓我編輯我的例子。 – Boon

回答

2

你使用(char[]){value1}獲得char*指向value1解釋爲char的例子是完全合法的。等效代碼可能看起來像

char achar = value1; 
[data appendBytes:&achar length:1]; 

但你(char[]){value1}顯然是一個代碼行數更少,所以我說去這一點。


對於任何誰感到困惑,(char[]){value1}compound literal。這是一種構建任何類型的價值的方法,包括集合,作爲表達式。在這種特殊情況下,它構造了一個char s的數組,初始值設定項包含一個元素,因此這將構造一個char[1],然後在傳遞給方法時隱式轉換爲指針。有趣的是,你甚至可以使用複合文字的地址(儘管該地址只對發現複合文字的完整表達式有效),所以在這種情況下的等價物應該是&(char){value1}

+0

爲什麼你需要char * cast? –

+0

@ValentinRadu:呃,你沒有。對不起,沒有想到。我會解決這個問題。 –

+0

+1複合文字 –