我发现了这个问题。为了使问题集中在这个问题上,我编辑并重新格式化了问题。
历史:以前我使用的是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 { $0.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 { $0.pointee }
yVal = Int32(bigEndian: yVal)
xVal和yVal是相同的,它们似乎是非常大的随机数。
答案 0 :(得分:1)
我解决了这个问题。
我正在使用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