【发布时间】:2021-05-05 04:59:03
【问题描述】:
我正在开发一种通过蓝牙将数据发送到自定义应用程序的产品。
虽然我的通信链接正常工作,但我似乎找不到将原始数据转换为结构的解决方案。
我正在通过蓝牙从 ESP32 发送数据,它发送的结构如下:
struct dataStruct {
float value = 0.45;
int temp = 23;
byte filler[250];
} dataRCV;
,将其置于 BLE 特性中并通知“客户端”(与其连接的手机)。
(填充符是未来值的占位符)
使用characteristic.value! 检索数据,并给我一个 256 字节的数组,我想将其转换回一个 swift 结构,如下所示:
struct dataStruct {
var value: Float
var temp: UInt16
var filler: [UInt8]
}
我发现了一些用于将结构转换为原始字节的代码 sn-ps,以及一些用于将整数的原始字节数组转换回仅由 UInt8 组成的结构的代码 sn-ps,但不适用于混合类型的数据...
有什么办法吗?或者有没有其他方法可以做到这一点?
编辑:
“256 字节数组”直接来自带有 pCharacteristic->setValue((byte*)&dataRCV, sizeof(dataRCV)); 的 ESP32 发送的数据,而 sizeof(dataRCV) 等于 256(因为我以这种方式定义了结构)。
当我在我的swift代码中print(characteristic.value!)时,它只会在控制台中打印256 bytes; this 数据是我想要转换回结构的数据。
在 C/C++ 中,使用 memcpy as explained here 是可能的,但我找不到任何关于如何在 Swift 中完成的信息,所以我还没有真正尝试过任何让我更接近我想做的事情。
【问题讨论】:
-
256 字节数组太模糊。您需要发布这些字节含义的详细信息。
Float只需要 4 个字节,UInt16需要 2 个字节,[UInt8]可以是任意大小。顺便说一句int temp = 1.70没有任何意义。 -
欢迎来到 SO 但请注意,这不是代码编写服务。您应该发布您尝试过的内容以及您面临的问题。
-
@LeoDabus 谢谢!我知道,我现在就补充。
-
编辑您的帖子并澄清您的问题
-
@LeoDabus 好点了吗?
标签: arrays swift struct type-conversion byte