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

C# BitArray的Kotlin等效实现:如何将数据库返回ByteArray转为布尔列表

最优实现方案(位运算版本,无字符串操作,性能最高)

直接通过位运算判断每一位的值,完全避免字符串拼接、反转、格式转换等冗余操作,和你原有实现的输出完全一致,完美对齐C# BitArray的位序规则:

fun convertByteArrayToBitArray(array: ByteArray): List<Boolean> = buildList {
    // 预分配容量,避免扩容开销
    ensureCapacity(array.size * 8)
    array.forEach { byte ->
        // 直接用无符号字节转换,替代手动判断负数加256的逻辑
        val unsigned = byte.toUByte().toInt()
        // 从最低位到最高位遍历,等价于你原有逻辑里反转二进制字符串的效果
        for (bit in 0 until 8) {
            add((unsigned shr bit and 1) == 1)
        }
    }
}

函数式写法版本

如果偏好更简洁的函数式风格,也可以使用flatMap实现:

fun convertByteArrayToBitArray(array: ByteArray): List<Boolean> = 
    array.flatMap { byte ->
        val unsigned = byte.toUByte().toInt()
        (0 until 8).map { bit -> (unsigned shr bit and 1) == 1 }
    }

说明

两个版本都和你原有实现的输出完全一致:

  1. 用Kotlin标准库的toUByte()处理有符号字节的问题,无需手动判断负数加256
  2. 位运算直接取每一位的值,性能相比字符串操作的实现提升数倍,尤其适合处理大数组场景
  3. 从最低位到最高位的遍历逻辑,刚好匹配C# BitArray的位序规则,不需要额外反转操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:03