許多與音頻會話編程相關的常量實際上都是四字符字符串(Audio Session Services Reference)。從AudioSessionGetProperty
等函數返回的OSStatus code同樣適用。iOS/C:將「整數」轉換爲四個字符串
問題是,當我試圖打印這些東西時,他們看起來像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));
}
但是這給了我 「A *€/3íT:E *€/ +€/」,而不是 「蓉城」。我的C語言功能不是很強大,但我的預感是上面的代碼試圖將內存地址解釋爲一個字符串。或者也許有一個編碼問題?有任何想法嗎?
哦,這聽起來很有用。雖然它給了我一個錯誤「預期的表達」,但我必須回到這個問題。 –
清理起來使它更容易使用。它返回一個char []而不是char *,這似乎混淆了現在的事情。 –
非常好,謝謝! –