

渡された「NSData data」から範囲を指定して切り出す場合、

[code]

    var work: UInt8 = 0x00
    data.getBytes(&work,range: NSMakeRange(開始位置, サイズ))
    
[/code]

上記のようにすることで、取得できますが、NSDataから一部分のNSDataを切り出す場合、

[code]

    var work: [UInt8] = 切り出すサイズ分確保
    data.getBytes(&work,range: NSMakeRange(開始位置, サイズ))
    
[/code]

このあとworkをNSDataに変換させる方法しかないのでしょうか。


CC BY-SA 3.0
2016-03-05T08:43:32.417
22828
2016-04-04T12:09:29.357
12842
question
swift
NSDataからNSDataを切り出したい


NSDataのリファレンスにざっと目を通してみてください。  
[NSData Class
Reference](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/index.html#//apple_ref/occ/cl/NSData)  
それっぽいメソッド名が目につくまで中身の詳細を読む必要はありません。

[\-
subdataWithRange:](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/index.html#//apple_ref/occ/instm/NSData/subdataWithRange:)  
`substring`なんてメソッド名のメソッドで文字列の一部分を取り出すことができるのを知っていれば、「このメソッドでdataの一部分を取り出すことができるのではないか」と想像がつくと思います。当たりかなと思ったところで中身を見てPlaygroundなどで試してみましょう。

[code]

    let bytes: [UInt8] = [0x01, 0x02, 0x03, 0x04]
    let data = NSData(bytes: bytes, length: bytes.count) //-><01020304>
    let subdata = data.subdataWithRange(NSMakeRange(1, 2)) //-><0203>
    
[/code]

あなたのご期待通りに動いているのではないでしょうか。

余談ですが、Swiftを使う場合、NSRangeの作成にrange演算子を使うこともできます。  
`NSRange(開始位置..<終了位置)`と書くと`NSMakeRange(開始位置,終了位置 - 開始位置)`と同じことになるので、上記の例は

[code]

    let subdata = data.subdataWithRange(NSRange(1..<3))
    
[/code]

と書いても同じになります。お試しください。


CC BY-SA 3.0
2016-03-05T09:07:40.767
22829
2016-03-05T09:07:40.767
13972
22828
answer