You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Android Studio调试问题:UInt8转UInt16数值异常排查

问题原因与解决方案

问题根因

你代码里的characteristic.value元素是有符号Byte类型,而非无符号UInt8。Byte的取值范围是-128到127,当原数值超过127时,会被存为负数(比如128对应Byte的-128)。调用toUInt()时会触发符号扩展——把Byte的符号位(最高位)填充到UInt的所有高位,导致原本应该是0x00的高位字节被错误置为0xFF,最终拼接出65408(0xFF80)这类异常值。

解决方案

在转换为UInt前,先将Byte转为无符号的UByte,避免符号扩展。修改后的代码如下:

val strValue = (characteristic.value[1].toUByte().toUInt().shl(8) or characteristic.value[2].toUByte().toUInt()).toUShort()

也可以拆分步骤,让逻辑更清晰:

val highByte = characteristic.value[1].toUByte()
val lowByte = characteristic.value[2].toUByte()
val strValue = (highByte.toUInt() shl 8 or lowByte.toUInt()).toUShort()

这样处理后,Byte转UByte会保留原始的8位无符号数值,比如原Byte的-128会被转为UByte的0x80,后续位操作就能得到正确的UInt16结果。

内容的提问来源于stack exchange,提问作者NIXIE_123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:20:26