繁体   English   中英

Apple iOS Swift5 BLE - 如何向特征发送 1 个字节(写 function 期望数据类型,但一个字节是“UInt8”类型)

[英]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 大小写

Int32 大小写

问题是您的Int8是可选的。 这就是为什么你得到一个额外的字节。 您所需要的只是在将可选数据转换为数据之前解包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM