如何在Objective-C中将枚举转换为字节数组?

时间:2013-01-16 04:04:14

标签: objective-c

我有一个枚举,我想将其中一个值传递给Objective-C方法,直接期望char *而不是创建另一个变量。我该怎么办?

e.g。

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

1 个答案:

答案 0 :(得分:2)

使用(char[]){value1}获取char*指向value1的{​​{1}}解释为char的示例完全合法。等效代码可能看起来像

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

但是你的(char[]){value1}显然是少了一行代码,所以我说顺其自然。


对于任何困惑的人,(char[]){value1}compound literal。它是一种构造任何类型值的方法,包括聚合,作为表达式。在这种特殊情况下,它构造了一个char s数组,初始化程序包含一个元素,因此构造一个char[1],然后在传递给方法时隐式转换为指针。有趣的是,您甚至可以获取复合文字的地址(尽管地址仅对找到复合文字的完整表达式有效),因此在这种情况下,等效地为&(char){value1}