Ich habe ein Swift-Programm, das Interop mit einer C-Bibliothek. Diese C-Bibliothek gibt eine Struktur mit einem char[]
Array nach innen, wie folgt aus:Ein C-Char-Array in einen String konvertieren
struct record
{
char name[8];
};
Die Definition wird korrekt in Swift importiert. Das Feld wird jedoch als Tupel von 8 Int8
Elemente (typisiert (Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)
) interpretiert, die ich keine Ahnung habe, wie mit Swift in String
umgewandelt werden.
Es gibt keinen String
Initialisierer, der ein Int8
Tupel akzeptiert, und es scheint nicht möglich, einen Zeiger auf das erste Element des Tupels zu bekommen (da Typen heterogen sein können, ist das nicht wirklich überraschend).
Jetzt ist meine beste Idee, eine kleine C-Funktion zu erstellen, die einen Zeiger auf die Struktur selbst akzeptiert und name
als char*
Zeiger anstelle eines Arrays zurückgibt, und damit gehen.
Gibt es aber pure schnelle Wege es zu tun?
Sind Sie sicher, Interop macht es zu einer C-Frage? Oder dass Ihr Workaround dies tut? Vor allem, weil Sie eine pure-schnelle Lösung wollen ... – Deduplicator
@Deduplicator, wenn ich nach einem C char-Array in eine Swift-Zeichenfolge konvertieren würde, würde ich nach Tags "c" und "swift" sicher suchen. – zneak
Es gibt nichts C über dieses Byte-Array, aber Sie haben eine Beschreibung davon in C, C++, Ziel-C, Ziel-C++ und so weiter. Es ist keine C-Frage. – Deduplicator