首页 > 解决方案 > kotlin 类型与 shl 运算符不匹配

问题描述

我正在通过蓝牙开发一个小型通信协议,供 arduino 将数据传输到 Android。协议的一部分发送包含行数的标头。我已成功读取计数的 MSB 和 LSB,现在必须将其从 Int 重新组装为 Short 值。我的声明如下:

var iLineCountMSB: Int = 0
var iLineCountLSB: Int = 0
var sLineCountMSB: Short = 0
var sLineCount: Short = 0

我已经从蓝牙插座读取了 MSB 和 LSB。请注意,这些值是 Int,而不是 Byte。我尝试将这两个 Int 重新组合为 Short 的尝试如下:

sLineCount = iLineCountMSB.toShort() shl 8 + iLineCountLSB.toShort()

我还将 MSB Int 值复制到 Short (sLineCountMSB):

sLineCountMSB = iLineCountMSB.toShort()
sLineCount = sLineCountMSB shl 8

我继续收到同样的错误:

-- 导致:: 未解析的引用。由于接收器类型不匹配,以下候选都不适用: public inline infix fun BigInteger.shl(n: Int): BigInteger defined in kotlin

Kotlin 文档将函数定义为:

中缀 fun shl(bitCount: Int): Long

我错了吗?这是否指定“Long”是返回的类型?我似乎可以成功编译的唯一“shl”是 Int = Int shl 8。

标签: kotlinbit-shift

解决方案


推荐阅读