Arrays 在Swift中将16位整数/数据转换为12位整数/数据
我目前有一个功能,可以接收UInt16并将其转换为数据,通过蓝牙发送 以下是一个片段:Arrays 在Swift中将16位整数/数据转换为12位整数/数据,arrays,swift,bluetooth,byte,bit,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位数据。遵循此格式的最佳方法是什么?显然,由于这些值的分辨
var integerToSend = UInt16(10)
let commandID = 0x07
let data = NSMutableData(bytes: &commandID, length: 1)
data.append(&integerToSend, length: 2)
我现在正试图写入一个寄存器,该寄存器接收12位数据。遵循此格式的最佳方法是什么?显然,由于这些值的分辨率较低,因此这样做会失去一些精度,但基本思想是将该值除以最大值,并将其缩放到新的最大值
Max 16 bit = 65535
Max 12 bit = 4095
Out = Round(In / 65535 * 4095)
或者,如果您不关心最低有效位,您可以将该值右移4
Out = In >> 4
显然,由于这些值的分辨率较低,因此这样做会损失一些精度,但基本思想是将该值除以最大值,并将其缩放到新的最大值
Max 16 bit = 65535
Max 12 bit = 4095
Out = Round(In / 65535 * 4095)
或者,如果您不关心最低有效位,您可以将该值右移4
Out = In >> 4
谢谢你的回复。请原谅我在这里缺乏理解,但似乎我会失去很多精度…例如,如果我尝试将“42”转换为12位格式,我将得到2。否则,您将如何转换为12位?。这不是一种兼容的格式,你只有12位来存储一个数字,而不是16位。在这里,你只能做两件事中的一件,缩放或截断。谢谢你的回复。请原谅我在这里缺乏理解,但似乎我会失去很多精度…例如,如果我尝试将“42”转换为12位格式,我将得到2。否则,您将如何转换为12位?。这不是一种兼容的格式,你只有12位来存储一个数字,而不是16位。这里只能做两件事中的一件,缩放或截断。12位整数是一种压缩形式,它不与字节边界对齐。您需要显示有关要使用的数据格式的更多详细信息。12位整数是一种不与字节边界对齐的压缩形式。您需要显示有关要使用的数据格式的更多详细信息。