Swift에서 다음 C 코드를 작성하는 방법은 무엇입니까? TrueType 'cmap'을 읽는 중 형식 4 Swift에서 서브 테이블 3
glyphIndex = *(&idRangeOffset[i] + idRangeOffset[i]/2 + (c - startCode[i]))
나는 간단한 작은 이진 데이터 판독기를 사용하여 포맷 4 트루 타입 문자 매핑 테이블을 읽으려고 해요. C에서 작업 할 때 포인터의 머리 또는 꼬리를 간신히 할 수 있기 때문에 포인터 조작이 포함될 때까지는 모두 훌륭하고 좋은 것입니다. 접두어가 붙어있는
Unsafe
접두사로 가두는 것만은 말할 것도없고.
여러 가지를 시도했지만 아무 것도 제대로 작동하지 않는 것 같습니다. 나는 Swift에서 포인터 "주소"를 사용하는 방법을 정확히 모르겠다. 당신이 ???
을 알 수 위의 코드에서
// The following variables are all [UInt16]:
// - startCodes
// - endCodes
// - idDeltas
// - idRangeOffsets
var gids = [Int]()
// Iterate segments, skipping the last character code (0xFFFF)
for i in 0 ..< segCount - 1 {
let start = startCodes[i]
let end = endCodes[i]
let delta = idDeltas[i]
let rangeOffset = idRangeOffsets[i]
let charRange = start ..< (end + 1)
if rangeOffset == 0 {
gids.append(contentsOf: charRange.map { charCode in
return (charCode + delta) & 0xFFFF
})
}
else {
for charCode in charRange {
// ???
}
}
}
:
예를 들어, 여기에 내가 어디보다 완벽한 좋습니다. 이것은 이상한 C 포인터를 사용하여 Glyph 인덱스를 검색하는 곳입니다. 문제는 단지 그것을 알아낼 수 없다는 것입니다. 실제로 이해 변수를 교체, 여기에 내가있어 무엇 :
for charCode in charRange {
Not too sure about this Actual value of idRangeOffset[i]
| |
v v
glyphIndex = *(&idRangeOffset[i] + rangeOffset/2 + (charCode - start))
^
|
Or this
}
그 경로 깨달음에게 나를 이어질 수 밖에 어떤 스위프트 3 포인터 전문가가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다! 내가 스위프트에 말씀으로 당신의 의사 C 코드 워드를 번역하면
'glyphIndex'를 만드는 코드의 경우 바깥 괄호 안의 부분은 포인터를 생성합니다. 그 괄호 앞에 오는'*'는 그 포인터에 의해 * 지시 된 데이터를 얻는다. – Toby
바깥 괄호 안의 첫 번째 비트'idRangeOffset [i]'는'idRangeOffset [i]'의 값의 주소를 취한다. C에서 이것은 포인터, 즉 다른 객체의 주소를 보유하는 변수입니다. 두 번째 부분 인'+ rangeOffset/2 + (charCode - start)'는 * 주소 *에 더 많은 값을 추가하여 이제 다른 곳을 가리킨다. – Toby
어떻게 신속하게 정확하게 표현해야 하는가? 나는 두려워 할 생각이 전혀 없다. – Toby