许多与音频会话编程相关的常量实际上是四字符字符串(音频会话服务参考)。这同样适用于从函数返回的OSStatus 代码AudioSessionGetProperty
,例如.
问题是,当我尝试开箱即用地打印这些东西时,它们看起来像 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 fu 不是很强大,但我的直觉是上面的代码试图将内存地址解释为字符串。或者可能存在编码问题?有任何想法吗?