2013-01-16 66 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复合文字 –