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

在Kotlin中如何将ByteArray转换为ShortArray?附小端序示例

在Kotlin中将ByteArray转换为ShortArray的最简方法

针对你提出的需求——把格式规范的ByteArray(比如示例byteArrayOf(12, 0, 24, 0))转换为小端序的ShortArray(预期结果[12, 24]),这里有两种简洁易用的实现方式:

方法一:利用ByteBuffer(推荐,处理大小端更灵活)

Java NIO的ByteBuffer工具类在Kotlin中可以直接使用,它能帮我们自动处理字节分组和大小端序,代码非常简洁:

val inputBytes = byteArrayOf(12, 0, 24, 0)
val resultShorts = ByteBuffer.wrap(inputBytes)
    .order(ByteOrder.LITTLE_ENDIAN) // 明确指定小端序
    .asShortBuffer()
    .let { shortBuf ->
        ShortArray(shortBuf.remaining()).apply { shortBuf.get(this) }
    }

// 此时resultShorts的值就是 [12, 24]

这个方法的优点是不需要手动处理字节偏移和符号问题,而且只需要修改ByteOrder.BIG_ENDIAN就能快速切换到大端序处理。

方法二:手动循环转换(轻量,无需依赖NIO)

如果你的ByteArray长度确定是偶数(像示例这样),也可以直接通过循环手动计算,代码同样简洁,而且更轻量:

val inputBytes = byteArrayOf(12, 0, 24, 0)
val resultShorts = ShortArray(inputBytes.size / 2) { index ->
    // 小端序规则:第2*index位是低字节,2*index+1位是高字节
    ((inputBytes[2 * index + 1].toInt() shl 8) or (inputBytes[2 * index].toInt() and 0xFF)).toShort()
}

这里需要注意:Kotlin的Byte是有符号类型,所以转成Int时要和0xFF做与运算,避免符号扩展导致错误结果。如果需要切换到大端序,只需要交换两个字节的位置即可:

// 大端序的转换逻辑
((inputBytes[2 * index].toInt() shl 8) or (inputBytes[2 * index + 1].toInt() and 0xFF)).toShort()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:42