Swift将字节数组转换为整数

你好,我是新的swift,并希望将一个字节数组转换为几个整数。 我已经用Java编写了工作代码,但我不太确定如何快速完成工作

byte[] codeData = Base64.decode(codeDataBase64, 0); ByteArrayInputStream bais = new ByteArrayInputStream(codeData); DataInputStream dis = new DataInputStream(bais); byte version = dis.readByte(); if (version == 1) { int anID = dis.readInt(); int anotherID = dis.readInt(); byte[] TK = new byte[512]; int readTK = dis.read(TK); if (readTK == TK.length) { Log.e("photoConnect success", "anID=" + anID + ", anotherID=" + anotherID + ", TK.length=" + TK.length); 

这是我到目前为止在Swift中所拥有的:

 func base64ToByteArray(base64String: String) -> [UInt8]? { if let nsdata = NSData(base64Encoded: base64String) { var bytes = [UInt8](repeating: 0, count: nsdata.length) nsdata.getBytes(&bytes, length: nsdata.length) return bytes } return nil // Invalid input } 

这个函数把它带到一个字节数组中,但我不确定用什么Swift类来模拟Java中DataInputStream的行为。

好的,所以我有一个工作解决scheme。 非常感谢Martin R向我展示了他上面链接的职位( parsingswift(3)数据stream的习惯方法 )

我基本上从后马丁R链接类,并修改它使用NSData对象,而不是一个数据对象:class DataStream {let data:NSData var index = 0 var atEnd:Bool {return index> = self.data.length }

 init(data:NSData) { self.data = data } func next() -> UInt8? { guard !self.atEnd else { return nil } let byte = self.data.subdata(with: NSRange(location: self.index, length: 1))[0] self.index += 1 return byte } func next(_ count:Int) -> NSData? { guard self.index + count <= self.data.length else { return nil } let subdata = self.data.subdata(with: NSRange(location: self.index, length: count)) self.index += count return subdata as NSData? } func upTo(_ marker:UInt8) -> NSData? { if let end = (self.index..<self.data.length).index( where: { self.data.base64EncodedData()[$0] == marker } ) { let upTo = self.next(end - self.index) self.skip() // consume the marker return upTo } else { return nil } } func skip(_ count:Int = 1) { self.index += count } func skipThrough(_ marker:UInt8) { if let end = (self.index..<self.data.length).index( where: { self.data.base64EncodedData()[$0] == marker } ) { self.index = end + 1 } else { self.index = self.data.length } } 

}

使用这个DataStream类和几个NSData方法,我能够模仿java方法DataInputStream.ReadInt()的行为:

 var someID : Int = 0 //get the part of the data that represents someID guard let someIDData = dataStream.next(4 /*size of someID in the data*/) else { fatalError("Error getting someID bytes")} //convert the data bytes to an Int someIDData.getBytes(&someID, length: someIDData.length) 

如果有人有更好的方法来完成这个,我很乐意听到! 我是Swift新手,所以这可能不是最好的方法。 这适用于Swift 3.1。