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