从位数组的子数组转换为 int,结果不正确

Convert from subarray of a bit array to int and has incorrect result

我找到问题了。为了使问题集中在问题上,我编辑并重新格式化了问题。

历史:以前我使用的是 NSData 而不是 Data。我应该使用 Data 所以我改变了问题。使用 Data 不能解决问题。我稍微重新格式化它以使问题突出。如果您有同样的问题,请查看答案

===========

我正在使用Swift 3.1

我想将字节数组的子数组转成Int

这就是我在这里所做的。

// I am extracting every 4 from the dataBytes and convert it to int
  var xDataArray = dataBytes[8...11]
  let xData = Data(buffer: UnsafeBufferPointer(start: &xDataArray, count: xDataArray.count))
  var xVal: Int32 = xData.withUnsafeBytes { [=10=].pointee }
  xVal = Int32(bigEndian: xVal)

  var yDataArray = dataBytes[12...15]
  let yData = Data(buffer: UnsafeBufferPointer(start: &yDataArray, count: yDataArray.count))
  var yVal: Int32 = yData.withUnsafeBytes { [=10=].pointee }
  yVal = Int32(bigEndian: yVal)

xVal和yVal是一样的,好像是很大的随机数

我解决了这个问题。

我正在使用 dataBytes[8...11] 获取子数组,这是它让我得到与 NSData.

相同结果的地方

我用 xDataArray:[UInt8] = [dataBytes[8], dataBytes[9], dataBytes[10], dataBytes[11]]

  var xDataArray: [UInt8] = [dataBytes[8], dataBytes[9], dataBytes[10], dataBytes[11]]
  let xData = NSData(bytes: &xDataArray, length: xDataArray.count)
  var xVal: Int32 = 0
  xData.getBytes(&xVal, length: MemoryLayout<Int32>.size)
  xVal = Int32(bigEndian: xVal)

  var yDataArray: [UInt8] = [dataBytes[12], dataBytes[13], dataBytes[14], dataBytes[15]]
  let yData = NSData(bytes: &yDataArray, length: yDataArray.count)
  var yVal: Int32 = 0
  yData.getBytes(&yVal, length: MemoryLayout<Int32>.size)
  yVal = Int32(bigEndian: yVal)

注意: 如果从服务器获取的 Int 是 32 位的,使用 Int32 而不是 Int