質問: お世話になります。 まだswiftでバイナリファイルを解析(その後オブジェクト化)、 また、バイナリ(オブジェクト)出力を行いたいのですが、 テキストファイルの読み込みなどは、よく見かけるのですが、 バイナリファイルとなると見つかりません。 ipad開発を始めたばかりで、検索するキーワードも思いつきません。 品となるものでも結構ですので、教えていただきたいです。
回答: データをバイナリで取り扱うには、`NSData`クラス、Swift3では、`Data`構造体が用意されています。バイト列(UInt8のコレクション)としてバッファを取り扱います。 API Reference - Foundation - NSData API Reference - Foundation - Data ファイルの読み書き、バイト列に対する走査、検索、抽出、挿入、置換、そしてC言語のポインタへの変換など、ひととおりのメソッド、プロパティが用意されているので、リファレンスを一読されることをお勧めします。 以下は、たいしたサンプルコードではありませんが、ファイルをバイナリデータとして開いていることを、実感できるものとして、作ったものです。(Swift3) ``` // デスクトップにあるPNGファイルへのURLを取得。 let dataURL = URL(fileURLWithPath: "/users/username/Desktop/sprite1.png") do { // ファイル読み込み let binaryData = try Data(contentsOf: dataURL, options: []) // 先頭から1024バイトを抽出。 let kbData = binaryData.subdata(in: 0..<1024) // 各バイトを16進数の文字列に変換。 let stringArray = kbData.map{String(format: "%02X", $0)} // ハイフォンで16進数を結合する。 let binaryString = stringArray.joined(separator: "-") print(binaryString) } catch { print("Failed to read the file.") } ``` 出力例: > > 89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49-48-44-52-00-00-00-24-00-00-00-24-08-06-00-00-00-(後略) > > >