繁体   English   中英

迅速。 如何将NSData中的字节写入另一个NSData?

[英]Swift. How to write bytes from NSData into another NSData?

我正在尝试将两个NSData对象连接成一个NSMutableData ,而不是让它们返回。 现在我正试图这样做:

  1. 获取第一个对象的长度。
  2. 按顺序写入NSMutableData :第一个对象长度,第一个对象,第二个对象。

代码如下:

let firstString = "first_string";
let secondString = "secondSting";

let firstData = firstString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
let secondData = secondString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!


let mutableData = NSMutableData()

var length = firstData.length

mutableData.appendBytes(&length, length: sizeof(Int))

mutableData.appendData(firstData)

mutableData.appendData(secondData)

然后我想要获得数据。 所以我想先读取数据长度,然后得到两个数据。

    var length = 0
    mutableData.getBytes(&length, length: sizeof(Int))

但是,当我试图获取数据时,我正在崩溃:

    var data = NSData()

    mutableData.getBytes(&data, range: NSMakeRange(sizeof(Int), length))

也许有人知道我的问题在哪里或如何获取数据?

您可以使用subdataWithRange()提取数据:

let firstData1 = mutableData.subdataWithRange(NSMakeRange(sizeof(Int), length))
if let firstString1 = NSString(data: firstData1, encoding: NSUTF8StringEncoding) as? String {
    println(firstString1)
} else {
    // bad encoding
}

你的解决方案

var data = NSData()
mutableData.getBytes(&data, range: NSMakeRange(sizeof(Int), length))

因为NSData是引用类型而data指向对象的指针 ,所以不起作用并崩溃。 您正在覆盖此指针和内存中的以下字节。

这在我的故事板中完美无故障地运行。 我只是在length之前省略了第二个var ,以避免重新定义它。

以下是每行的输出:

"first_string"
"secondSting"
<66697273 745f7374 72696e67>  // let firstData = ...
<7365636f 6e645374 696e67>    // let secondData = ...
<>                            // let mutableData = ...
12                            // var length = ...
// appending data
<0c000000 00000000>           
<0c000000 00000000 66697273 745f7374 72696e67>
<0c000000 00000000 66697273 745f7374 72696e67 7365636f 6e645374 696e67>
0                            // length = 0
<0c000000 00000000 66697273 745f7374 72696e67 7365636f 6e645374 696e67>
12                           // length

这意味着您可能在其他地方出现错误。 你没有重新定义length ,对吧?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM