【发布时间】:2012-12-22 17:53:46
【问题描述】:
很多与音频会话编程相关的常量实际上是四个字符的字符串 (Audio Session Services Reference)。这同样适用于从 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 fu 不是很强大,但我的直觉是上面的代码试图将内存地址解释为字符串。或者可能存在编码问题?有什么想法吗?
【问题讨论】: