0

バイトのダンプがあり、構造を解析する必要があります

c++ の例:

(*(SomeStruct*)(bufPtr))

どうすればswiftでできますか?

4

1 に答える 1

2

C コードに相当するものは次のようになります。

let s = UnsafePointer<SomeStruct>(bufPtr).memory

bufPtr(名前のない引数の初期化子を持つ型であると仮定しUnsafePointerます-そうでない場合は、別の特定の初期化子が必要になるか、もう少し強制する必要があります。)

C/C++ に適用されるのと同じ警告がここにも適用されbufPtrますSomeStruct

一方、バイトを 1 つずつステップ実行する場合はvar ptr = UnsafePointer<UInt8>(bufPtr)、C ポインターのようにインデックスを付けてインクリメントできる を作成できます (つまりptr[i]、 と ++ptr)。

読み取ったバイト数が事前にわかっている場合は、それをバッファ ( let buf = UnsafeBufferPointer(start: ptr, count: i)) に保存することもできます。これにより、通常のコレクションのように扱うことができます ( 、などと一緒for-inに使用します)。繰り返しますが、鍵は名前にあります。カウントを台無しにすると、これは安全ではありません。mapfind

于 2015-02-04T12:49:05.387 に答える