iOS/C: Konvertieren "integer" in vier Zeichenkette

Eine Menge der Konstanten, die im Zusammenhang mit Audio-Session-Programmierung sind wirklich vier-Zeichen-strings (Audio-Session-Dienste-Referenz). Das gleiche gilt für die OSStatus-code von Funktionen zurückgegeben wie AudioSessionGetProperty.

Das problem ist, dass wenn ich versuchen zu drucken, diese Dinge aus der box, Sie sehen aus wie 1919902568. Ich kann die Stecker, die in den Rechner ein und biegen Sie auf die ASCII-Ausgabe und es wird mir sagen, "roch", sondern es muss eine programmatische Art und Weise, dies zu tun.

Ich hatte nur begrenzten Erfolg in einem meiner C-Funktionen mit den folgenden block:

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);
}

Was ich tun möchte, ist zu abstrahieren, diese Funktion aus der aktuellen Funktion, um es an anderer Stelle. Ich habe versucht zu tun,

char * fourCharCode(UInt32 code) {
    //block
}
void someOtherFunction(UInt32 foo){
    printf("%s\n",fourCharCode(foo));
}

aber das gibt mir "à*€/3íT:ê*€/+€/", nicht "roch". Meine C-fu ist nicht sehr stark, aber meine Vermutung ist, dass die oben genannten code versucht zu interpretieren, wird die Speicher-Adresse als string. Oder vielleicht gibt es ein encoding-Problem? Irgendwelche Ideen?

Schreibe einen Kommentar