与音频会话编程相关的许多常量实际上是四个字符的字符串(音频会话服务参考)。同样的情况也适用于像AudioSessionGetProperty
这样的函数返回的OSStatus code。
问题在于,当我尝试打印这些内容时,它们看起来像1919902568。我可以将其输入计算器并开启ASCII输出,它会告诉我"roch",但肯定有一种编程的方式来做到这一点。
在我的一个C函数中,我已经有了一些有限的成功,以下是相关代码块:
char str[20];
// see if it appears to be a four-character code
*(UInt32 *) (str + 1) = CFSwapInt32HostToBig(error);
if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
str[0] = str[5] = '\'';
str[6] = '\0';
} else {
// no, format as integer
sprintf(str, "%d", (int)error);
}
我想做的是将这个功能从其当前函数中抽象出来,以便在其他地方使用它。我试过了。
char * fourCharCode(UInt32 code) {
// block
}
void someOtherFunction(UInt32 foo){
printf("%s\n",fourCharCode(foo));
}
但是那给我“à*€/3íT:ê*€/+€/”,而不是“roch”。我的C语言能力不是很强,但我猜测上面的代码试图将内存地址解释为字符串。或者可能存在编码问题?有什么想法吗?
NSFileTypeForHFSTypeCode
对于1634039412
的烦人返回值是一个包含单引号的 6 个字符长度的字符串"\'aevt\'"
。:/ - pkamb