[英]Apple iOS Swift5 BLE - How to send 1 byte to a characteristic (write function expects Data type, but one byte is "UInt8" type)
我正在开发将浮点数和 8、16、32 位整数数据类型写入现有 BLE GATT 外围设备的代码。 外围特性是为这些特定尺寸构建的。 对于 Floats 和 32 位 Ints,创建 Data 类型往往会在缓冲区中创建无关的 0,并使其成为 5 字节 object,我的外围设备拒绝这样做。 所以我这样切片:
let int32Value = Int32(fieldValue)
let data = withUnsafeBytes(of: int32Value) { Data($0) }
let data_slice = data[0...3]
peripheral.writeValue(data_slice, for: characteristic, type: writeType)
对于 16 位 Ints,我只是以不同的方式对其进行切片:
let int16Value = Int16(fieldValue)
let data = withUnsafeBytes(of: int16Value) { Data($0) }
let data_slice = data[0...1]
peripheral.writeValue(data_slice, for: characteristic, type: writeType)
所有这一切都有效,我可以看到数据已在设备上设置。 但是对于 8 位 Ints,我尝试:
let int8Value = Int8(fieldValue)
let data = withUnsafeBytes(of: int8Value) { Data($0) }
let data_slice = data[0]
peripheral.writeValue(data_slice, for: characteristic, type: writeType)
而且我得到一个编译时错误 - writeValue
方法需要第一个参数的Data
类型,但从上面的代码来看,它将data_slice
解释为Bytes
object 并且不会编译。 如果我不执行“data_slice”操作,那么按照我在此处创建数据的方式, data
的长度为 2 个字节,并且会被外围设备拒绝。 我收到“不正确的特征数据长度”错误。
我似乎在第 22 条军规中。 我需要用来发送 BLE 外设值的系统级writeValue
function 不允许将单个 8 位 Int 作为参数。 但是我的外围设备上的特征不会接受任何东西。 发送单个 8 位 Int 在其他平台上对我有用,例如 Android。在这种情况下你会怎么做?
显示 Int8 和 Int32 案例的图像:
问题是您的Int8
是可选的。 这就是为什么你得到一个额外的字节。 您所需要的只是在将可选数据转换为数据之前解包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.