Audio Session プログラミングに関連する多くの定数は、実際には 4 文字の文字列です ( Audio Session Services Reference )。などの関数から返されるOSStatus コードにも同じことが当てはまりますAudioSessionGetProperty
。
問題は、これらのものを箱から出して印刷しようとすると、1919902568 のように見えることです。それを電卓に接続して ASCII 出力をオンにすると、「roch」と表示されますが、プログラムによる方法が必要です。これを行う。
次のブロックを使用して、C 関数の 1 つで限定的な成功を収めました。
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));
}
しかし、それは「roch」ではなく「à*€/3íT:ê*€/+€/」を与えてくれます。私の C fu はあまり強力ではありませんが、上記のコードはメモリ アドレスを文字列として解釈しようとしているようです。それとも、エンコードの問題があるのでしょうか? 何か案は?