성능상의 이유로 내 내부 루프는 C로 변환해야합니다. 그것을 디버깅하려고 노력하고있어 C 구조체에 문자열을 저장할 수 있기를 원합니다. 순간스위프트 문자열을 C로 옮기는 방법
typedef struct Slot {
char name[12];
Byte fixed;
Byte loaded;
Obj obj;
} Slot;
이 단지 디버깅을 위해, 그래서 너무 특히이 일어날 수 있도록하는 방법에 대한 아니에요 (즉, 문자 * 이름은? 문자 이름 [12]? 뭔가 다른?)
문자열 미만 12 자 경우var vars = [String]()
...
var i = 0
for v in vars {
let array: [UInt8] = Array(v.utf8)
memory.pointee.slots[i].name.0 = Int8(array[0])
memory.pointee.slots[i].name.1 = Int8(array[1])
memory.pointee.slots[i].name.2 = Int8(array[2])
memory.pointee.slots[i].name.3 = Int8(array[3])
memory.pointee.slots[i].name.4 = Int8(array[4])
memory.pointee.slots[i].name.5 = Int8(array[5])
memory.pointee.slots[i].name.6 = Int8(array[6])
memory.pointee.slots[i].name.7 = Int8(array[7])
memory.pointee.slots[i].name.8 = Int8(array[8])
memory.pointee.slots[i].name.9 = Int8(array[9])
memory.pointee.slots[i].name.10 = Int8(array[10])
memory.pointee.slots[i].name.11 = Int8(array[11])
}
어떤 작동하지 않습니다
은 빠른 측면에서이 문자 그대로 내가 지금까지 가지고 올 수있었습니다 최고입니다. (그리고 어쨌든 말도 안돼)
어떻게해야합니까?
편집 : Obtain a pointer to a C char array in Swift의 복제본이 아닙니다. C에서 Swift가 아닌 C로 이동하려고했기 때문에 고정 길이 문자 배열로 제한되지 않았기 때문에 그만한 최고의 솔루션이었습니다. 지금까지 발견.
편집 2 :이 은 의 사본입니다. 어떤 것이 내 문제를 해결 했습니까 (최근 업데이트로). 감사. 당신이 스위프트의 String
유형에서 getCString
방법 원하는처럼
원래 Swift'String' 값은 어디에 있습니까? 'array'와'v.utf8'은 무엇입니까? 그들은 원시 바이트 배열, 신속한 문자 배열,'CChar' 배열 또는 무엇입니까? – Dai
@Dai vars는 문자열 배열, 즉 [String]()입니다. 따라서 v는 단지 String 인스턴스입니다. Array는 UInt8 배열입니다 : [UInt8] 및 v.utf8은 Xcode에 따라 String.UTF8View입니다. – aepryus