Swift 以十进制获取特征值

Posted

技术标签:

【中文标题】Swift 以十进制获取特征值【英文标题】:Swift get characteristic.value in decimal 【发布时间】:2016-12-16 20:46:18 【问题描述】:

我尝试使用 Swift 3 在 Xcode 中创建一个小型 ios 应用程序。我尝试连接到 BLE 设备,然后读取电池电量。

我收到以下回复:

...UUID = 电池电量,属性 = 0x12,值 = ...

然后我尝试将 HEX 30 转换为十进制 48。 但我不知道怎么做。

我试过这个:

print(String(bytes: characteristic.value!, encoding: String.Encoding.utf8))
print(Int(strtoul(str, nil, 16)))
let dataBLE = String(data: characteristic.value!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
print(dataBLE)

但这些都不起作用。如何将 characteristic.value 的值从十六进制转换为十进制?

【问题讨论】:

characteristic.value是什么类型的? 这篇文章有帮助吗?它已针对 Swift 3 进行了更新:Reading a BLE Peripheral Characteristic and checking its value shallowThought:如何查看值的类型? leanne:我不确定如何使用建议的解决方案。我需要所有代码吗? 您是否检查过此服务是否提供org.bluetooth.characteristic.battery_level 属性?这是获取设备电池电量的首选方法,并将返回 0 到 100 之间的百分比。目前尚不清楚您正在读取的实际值是什么(或者它是什么类型,或者它来自什么特征)。你显示了一堆print 语句,但没有显示它们输出的内容。 【参考方案1】:

应该可以的:

let data = characteristic.value
var byte:UInt8 = 0
data.copyBytes(to: &byte, count: 1)

let valueInInt = Int(byte)
print(valueInInt)

【讨论】:

【参考方案2】:

org.bluetooth.characteristic.battery_level (0x2A19) 的值似乎是单个 uint8(在 Swift 中为 UInt8)。而characteristic.value! 的结果是Data,它是UInt8 的集合,在你的例子中,它只包含一个UInt8 值。

试试这个:

print(characteristic.value![0])

但是,当您需要在应用程序中使用其他各种特性时(这是使用 BLE 的应用程序非常常见的场景),leanne 评论中显示的链接文章将非常有用。

【讨论】:

在哪里可以了解更多关于 BLE 设备返回的结果类型的信息?我怎么知道这个值是数据?在我的一些尝试中,我在打印 .value 时也看到了 Optional("0")。我是 swift 和 xcode 的新手,所以我对所有问题表示歉意。 我明白了,我当然要调查一下:bluetooth.com/specifications/gatt/… @jakobdo,看来你自己找到了一个。 我怎么知道这个值是数据? 检查this,value 属性的类型是Data?。它可以包含各种类型的数据,因此您需要将其转换为所需的类型。我的答案中显示了转换为UInt8,链接文章中显示了以更通用和更智能的方式转换为许多其他类型。关于Optional("0"),当你打印一些可选类型的数据时——比如Data?(又名Optional<Data>)你就明白了。打开它。 非常感谢您提供的所有信息。我以前编写过许多不同的语言,但我真的觉得 swift 有点难以理解。你有学习 swift 3 的好资源吗? @jakobdo,从 Swift 的第一个公开测试版开始,我花了两年半的时间学习 Swift。你至少应该仔细阅读两本 Swift 书籍,Swift book 和 Using book。你可能不想花两年半的时间来学习 Swift,Apple 的开发者论坛或这个网站会是一个很好的帮助。

以上是关于Swift 以十进制获取特征值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift4 中获得蓝牙外设的特征值?

swift 在swift中使用特征和协议的演示。

MySQL 查询以获取 post_id 和特征图像 URL

如何从 Swift 中的 BLE 外设特征写入回调中提取数据?

如何在 Swift 中读取 BLE 特征浮点数

以十六进制表示形式显示 u8 切片