Многие константы, связанные с программированием аудиосеансов, действительно представляют собой четырехсимвольные строки (Справочник по сеансам аудиосвязи). То же самое относится к OSStatus code, возвращаемому из таких функций, как 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 не очень сильный, но я подозреваю, что приведенный выше код пытается интерпретировать адрес памяти как строку. Или, может быть, проблема с кодировкой? Любые идеи?