2010-02-04 60 views
1

有谁知道应该如何定义ASF_OBJECT_GUID_TEST以避免在下面标记的行中出现编译错误,或者在哪里可以找到关于它的更多信息?如何正确定义字符数组

#define ASF_OBJECT_GUID_TEST {(char)0x75, (char)0xB2, (char)0x00} 

void testFunction(char * testChar) 
{ 

} 

int main(int argc, char * argv[]) 
{ 
    char test[] = ASF_OBJECT_GUID_TEST; 

    testFunction(test); 
    testFunction(ASF_OBJECT_GUID_TEST); // <- fails to compile this line of code 

    return 0; 
} 
+0

如果你的数据是在编译时知道,你可以说'的#define ASF_OBJECT_GUID_TEST “\ X75 \ XB2”'。 – 2010-02-04 05:53:51

回答

2
{(char)0x75, (char)0xB2, (char)0x00} 

是一个初始化列表和本身不是在C89的阵列(或指针)。

你,而不是可以使用:

#define ASF_OBJECT_GUID_TEST "\x75\xB2" 
1

你想投的ASF_OBJECT_GUID_TEST,即

testFunction((char[])ASF_OBJECT_GUID_TEST)

#define ASF_OBJECT_GUID_TEST (char[]){(char)...}

+0

当然不需要'(char)'在花括号里面(你可能知道这一点,所以评论主要是针对OP)。此外,这只是C99。 – 2010-02-04 05:52:54

0

感谢。那正是我所期待的。

假设我定义了许多字符串文字,它们有8个字符,其中每个字符实际上是一个字节的值。有没有办法通过在每两个字符之间添加“\ x”来创建一个可以修改这些字符串的宏?

#define TEST SOME_MACRO("33698149") 

如果测试是"\x33\x69\x81\x49"

+1

这应该作为一个新问题提出,或者您应该编辑原始帖子以包含此问题。 – Ponkadoodle 2010-02-04 06:13:11

+1

绝对是一个新问题,虽然简短的答案是“不,你不能这样做”。 – 2010-02-04 06:15:40