我有一个NSData对象,正在分配字节,表示0-255的无符号整数。将这些字节转换为整数的最简单方法是什么,或者,如果更容易,则转换为字符串/ NSString?
例如,如果我的NSData对象中有字节0x00,0x02和0x0A,那么我希望有一个{0,2,10}的整数数组或字符串/ NSString" 0210&# 34。
似乎有很多方法可以将NSData转换为ASCII NSStrings,UInt8数组等,但我不能在生活中找出如何在Swift中进行这种简单的转换。
编辑:我想要的示例代码:
var data:NSData
/*allocate NSData*/
var unsignedInts = [Int]()
/*Allocate each byte of data to an individual index of unsignedInts */
print(unsignedInts)
//should see {0, 1, 10} if bytes are 0x00, 0x01, and 0x0A
答案 0 :(得分:2)
有必要创建一个新的Int数组,因为Int每个条目需要更多的字节。
var nsData: NSData = NSData(bytes: [0x00, 0x02, 0x0A] as [UInt8], length: 3)
let buffer = UnsafeBufferPointer<UInt8>(start:UnsafePointer<UInt8>(nsData.bytes), count:nsData.length)
print("nsData: \(nsData)")
var intData = [Int]()
intData.reserveCapacity(nsData.length)
var stringData = String()
for i in 0..<nsData.length {
intData.append(Int(buffer[i]))
stringData += String(buffer[i])
}
print("intData: \(intData)")
print("stringData: \(stringData)")
nsData:&lt; 00020a&gt;
intData:[0,2,10]
stringData:0210
答案 1 :(得分:0)
我可以推荐这样的方法:
import Foundation
extension NSData {
var byteBuffer : UnsafeMutableBufferPointer<UInt8> {
return UnsafeMutableBufferPointer(start: UnsafeMutablePointer(bytes), count: length)
}
var array : [UInt8] {
return Array(byteBuffer)
}
var intArray : [Int] {
return byteBuffer.map(Int.init)
}
var byteString : String {
return byteBuffer.lazy.map(String.init).joinWithSeparator("")
}
}
用法:
let data1 = NSData(bytes: [0x48, 0xa1, 0x95, 0xe, 0x1c, 0x38, 0x82] as [UInt8], length: 7) // <48a1950e 1c3882>
print(data1.array) // "[72, 161, 149, 14, 28, 56, 130]"
print(data1.intArray) // "[72, 161, 149, 14, 28, 56, 130]"
print(data1.byteString) // "72161149142856130"
let data2 = NSData(bytes: [0x00, 0x02, 0x0A] as [UInt8], length: 3)
print(data2.array) // "[0, 2, 10]"
print(data2.intArray) // "[0, 2, 10]"
print(data2.byteString) // "0210"
非常简单,快捷,高效,就像这样。
请注意,在某些情况下,您实际上并不需要这样的数组,因为您可以以相同的方式访问数据的所有值而无需分配新数组(推荐):
data1.byteBuffer[4] // 28
data1.byteBuffer.count // 7
data1.byteBuffer(14) // 3
编辑:我添加了一个返回Int
数组的属性,但我找不到您需要它的原因