有相反的运算符@encode
吗?
例如,当你这样做时:@encode(int)
,你得到"i"
. 我希望能够做到这一点:@decode("i") myInt = 5;
这可能吗?是否有运营商来处理这个问题?
有相反的运算符@encode
吗?
例如,当你这样做时:@encode(int)
,你得到"i"
. 我希望能够做到这一点:@decode("i") myInt = 5;
这可能吗?是否有运营商来处理这个问题?
不@encode
,需要一个类型,在 C 中,不可能返回一个类型。(typeof()
操作符是一个 GNU 扩展,但它不需要 C 字符串,所以你想要的是不可能的。
你有两个选择。一:重新设计你的代码。如果你需要这个,你可能有一个设计问题。
第二,使用动态内存分配并编写您自己的函数,该函数采用类型字符串并相应地分配内存。
您可以使用NSGetSizeAndAlignment来获取大小并进行分配。
NSUInteger size;
NSGetSizeAndAlignment(encoding, &size, NULL);
void* ptr = malloc(size);
if (strcmp(encoding, @encode(int)) == 0) {
*(int*)ptr += 2;
} else if (strcmp(encoding, @encode(float)) == 0) {
*(float*)ptr += 2.0;
}
free(ptr);
嗯,是的.. 最肯定的是,是...
int five = 5;
__typeof(five) four = 4;
printf("@encode(int):%s\n", @encode(int));
printf("typeof(five):%s\n", @encode(__typeof(five)));
printf("typeof(four):%s\n", @encode(__typeof(four)));
➜</p>
@encode(int):i
typeof(five):i
typeof(four):i