Molte delle costanti associate alla programmazione di sessioni audio sono in realtà stringhe di quattro caratteri (Audio Session Services Reference). Lo stesso vale per OSStatus code restituito da funzioni come AudioSessionGetProperty
.iOS/C: conversione "intero" in stringa di quattro caratteri
Il problema è che quando provo a stampare queste cose, fuori dalla scatola, sembrano 1919902568. posso inserire che in Calcolatrice e accendere uscita ASCII e mi dirò "roch", ma ci deve essere un modo programmatico per farlo.
ho avuto un successo limitato in una delle mie funzioni C con il seguente blocco:
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);
}
Quello che voglio fare è quello di astrarre questa caratteristica fuori della sua funzione attuale, al fine di utilizzare altrove . Ho provato a fare
char * fourCharCode(UInt32 code) {
// block
}
void someOtherFunction(UInt32 foo){
printf("%s\n",fourCharCode(foo));
}
ma che mi dà "à * €/3IT: ê * €/+ € /", non "roch". Il mio C fu non è molto forte, ma la mia impressione è che il codice sopra tenta di interpretare l'indirizzo di memoria come una stringa. O forse c'è un problema di codifica? Qualche idea?
Ooh, sembra davvero utile. Mi dà comunque un errore "Expected Expected" fuori dagli schemi, quindi dovrò tornare a questo. –
Pulito per renderlo un po 'più facile da usare. Restituisce un char [] piuttosto che un char *, e questo sembra confondere le cose ora. –
eccellente, grazie! –