【发布时间】:2017-06-23 15:29:53
【问题描述】:
我对 Data 对象如何快速工作感到有些困惑。我正在尝试使用蓝牙写入值,我需要写入的值之一是 500。为了写入,您需要在发送之前将值转换为数据对象。这是我正在使用的代码。
if(characteristic != nil){
var byteCount = 1
if(sensitivity > 255){
byteCount = 2
}
let data = Data.init(bytes: &sensitivity, count: byteCount)
peripheral.writeValue(data, for: sensCharacteristic!, type: CBCharacteristicWriteType.withResponse)
peripheral.readValue(for: sensCharacteristic!)
}else{
print("No bluetooth Connection")
}
据我了解,如果我尝试发送一个需要超过一个字节来表示的值,那么它将溢出,因此当我发送 500 时,它写入的值实际上是 244。因此,我尝试写入和发送 2 个字节但我得到的值是 244101。我不确定这个值是从哪里来的。隐藏500的正确方法是什么?
每当读取特征然后将其放置在标签中时,都会调用此函数。它所做的只是遍历数据并将每个字节添加到字符串中。
func readCharacteristic(data: Data) -> String {
var characterString = ""
for byte in data {
let c = String(byte)
characterString.append(c)
}
return characterString
}
【问题讨论】:
-
你在哪里看到
244101?sensitivity是什么数据类型?您的外围设备只需要一个字节的数据,还是可以接受多个字节? -
就在 writeValue 之后,我有一个具有相同特征的 readValue,我将为此添加代码。 Sensitivity 只是一个 int,它的值可以是 4、13、23 ... 230、500。每个特性在此外围设备上的最大大小为 20 个字节,设备通常是否要求您一次只写入 1 个字节?
-
大概你可以找到答案here
-
阅读该线程,虽然可能错过了一些东西
-
好的 - 问题几乎可以肯定是你如何转换你读回的数据......你期待一个字符串吗?
标签: ios swift bluetooth bluetooth-lowenergy