从位数组的子数组转换为 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
我找到问题了。为了使问题集中在问题上,我编辑并重新格式化了问题。
历史:以前我使用的是 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