Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Swift中将16位整数/数据转换为12位整数/数据_Arrays_Swift_Bluetooth_Byte_Bit - Fatal编程技术网

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

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位数据。遵循此格式的最佳方法是什么?显然,由于这些值的分辨

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

以下是一个片段:

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位整数是一种不与字节边界对齐的压缩形式。您需要显示有关要使用的数据格式的更多详细信息。