在Swift中将16位整数/数据转换为12位整数/数据

时间:2017-08-04 22:51:26

标签: arrays swift bluetooth byte bit

我目前有一个功能可以接入UInt16并将其转换为数据以通过蓝牙发送。

这是一个片段:

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

我现在正试图写入一个可以输入12位数据的寄存器。遵循这种格式的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

显然你会因为分辨率较低而失去一些精确度,但基本思路是将值除以最大值,并将其缩放到新的最大值。

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

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

Out = In >> 4