29221


お世話になります。

まだswiftでバイナリファイルを解析（その後オブジェクト化）、  
また、バイナリ（オブジェクト）出力を行いたいのですが、

テキストファイルの読み込みなどは、よく見かけるのですが、  
バイナリファイルとなると見つかりません。

ipad開発を始めたばかりで、検索するキーワードも思いつきません。

品となるものでも結構ですので、教えていただきたいです。


CC BY-SA 3.0
2016-09-28T01:02:32.427
29196
2016-09-28T11:27:11.147
11148
question
swift swift2 swift3
swiftでバイナリファイルの読み書きを行いたい


データをバイナリで取り扱うには、`NSData`クラス、Swift3では、`Data`構造体が用意されています。バイト列（UInt8のコレクション）としてバッファを取り扱います。

[API Reference - Foundation -
NSData](https://developer.apple.com/reference/foundation/nsdata)  
[API Reference - Foundation -
Data](https://developer.apple.com/reference/foundation/data)

ファイルの読み書き、バイト列に対する走査、検索、抽出、挿入、置換、そしてC言語のポインタへの変換など、ひととおりのメソッド、プロパティが用意されているので、リファレンスを一読されることをお勧めします。

以下は、たいしたサンプルコードではありませんが、ファイルをバイナリデータとして開いていることを、実感できるものとして、作ったものです。（Swift3）

[code]

    // デスクトップにある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.")
    }
    
[/code]

出力例：

>
> 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-（後略）


CC BY-SA 3.0
2016-09-28T11:27:11.147
29221
2016-09-28T11:27:11.147
18540
29196
answer