我已经找到了在Swift中提取NSData的方法,但是在设置它方面我感到有些困惑:
var testBytes : [Byte] = [0x14, 0x00, 0xAB, 0x45, 0x49, 0x1F, 0xEF, 0x15,
0xA8, 0x89, 0x78, 0x0F, 0x09, 0xA9, 0x07, 0xB0,
0x01, 0x20, 0x01, 0x4E, 0x38, 0x32, 0x35, 0x56,
0x20, 0x20, 0x20, 0x00]
var msgData = NSData(bytes: testBytes, length: testBytes.count)
println("\(msgData)")
var length : Int = testBytes.count
var out: NSInteger = 0
let ptr = UnsafePointer<UInt8>(msgData.bytes)
var bytes = UnsafeBufferPointer<UInt8>(start: ptr, count: 28)
如果我想访问特定的字节,可以使用以下方式获取:
let targetAddress = UInt32(bytes[2]) << 16 |
UInt32(bytes[3]) << 8 |
UInt32(bytes[4]) << 0
现在假设我想要使用以下方式设置一个值:
bytes[11] = UInt8(UInt32(bytes[11]) | 0x0FF)
我遇到了一个错误:无法分配此表达式的结果
。我也尝试使用&bytes[11]
,但似乎也不起作用。
我猜测这是因为数组使用了不安全的缓冲区指针。是否有一个简单的调用可以使赋值正确地工作?