【问题标题】:Convert 16 bit integer/data to 12 bit integer/data in Swift在 Swift 中将 16 位整数/数据转换为 12 位整数/数据
【发布时间】:2018-01-12 23:10:45
【问题描述】:

我目前有一个函数,它接收 UInt16 并将其转换为数据以通过蓝牙发送。

这是一个sn-p:

var integerToSend = UInt16(10)
let commandID = 0x07
let data = NSMutableData(bytes: &commandID, length: 1)
data.append(&integerToSend, length: 2)

我现在正在尝试写入一个接收 12 位数据的寄存器。遵守这种格式的最佳方式是什么?

【问题讨论】:

  • 12 位整数是一种不与字节边界对齐的压缩形式。您需要显示有关要使用的数据格式的更多详细信息。

标签: arrays swift bluetooth byte bit


【解决方案1】:

显然,这样做会损失一些精度,因为这些值的分辨率较低,但基本思想是将值除以最大值,然后将其缩放到新的最大值。

Max 16 bit = 65535
Max 12 bit = 4095
Out = Round(In / 65535 * 4095)

或者,如果您不关心最低有效位,您可以将值右移 4

Out = In >> 4

【讨论】:

  • 感谢您的回复。请原谅我在这里缺乏理解,但似乎我会失去很多精度......例如,如果我尝试将“42”转换为12位格式,我最终会得到2。
  • 您如何转换为 12 位?它不是一种兼容的格式,你只有 12 位来存储一个数字而不是 16 位。在这里你只能做两件事之一,缩放或截断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2019-05-30
  • 2014-07-03
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多