Swiftに次のCコードを書くにはどうすればよいですか?TrueType 'cmap'形式を読む4 Swiftのサブテーブル3
単純なバイナリデータリーダーを使用して、フォーマット4のTrueType文字マッピングテーブルを読み取ろうとしています。 Cで作業しているときにポインタの頭や尾をつかむことができるので、ポインタの操作が関係するまではすべてうまくいきます。Unsafe
という接頭辞を付けて偽装しているだけではありません。
私は複数のことを試みましたが、何も正しく動作しないようです。私はちょうどスウィフトのポインタ "アドレス"をどのように扱うか正確にはわからないと思う。
たとえば、ここに私はどこのより完全なアイデアです:上記のコードで
// 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-ポインタアドレスポインターハァットリックを使用してグリフインデックスを取得するところです。問題は、私はそれを理解できないということです。私は実際に理解して変数を置き換える、ここで私が持っているものです:
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では、これはポインタ、つまり別のオブジェクトのアドレスを保持する変数です。 2番目の部分である '+ rangeOffset/2 +(charCode - start)'は、*アドレス*にいくつかの値を追加して、他の場所を指すようにします。 – Toby
これを迅速に正確に表現する方法私は恐れているとは思えません – Toby