scala - 如何将 Seq[Byte] 转换为 Array[Boolean] 表示 Scala 中的每一位

标签 scala byte bit bitset

是否有更好的方法将字节序列转换为 Seq[Boolean],其中每个元素代表字节序列中的一个位?

我目前正在这样做,但是 byte2Bools 似乎有点太重了......

object Main extends App {

  private def byte2Bools(b: Byte) =
    (0 to 7).foldLeft(ArrayBuffer[Boolean]())((bs, i) => bs += isBitSet(b, i))

  private def isBitSet(byte: Byte, bit: Int) =
    ((byte >> bit) & 1) == 1

  val bytes = List[Byte](1, 2, 3)
  val bools = bytes.flatMap(b => byte2Bools(b))

  println(bools)

}

也许真正的问题是:byte2Bools 的更好实现是什么?

最佳答案

首先,foldLeft 中的累加器不一定是可变集合。

def byte2Bools(b: Byte): Seq[Boolean] = 
  (0 to 7).foldLeft(Vector[Boolean]()) { (bs, i) => bs :+ isBitSet(b)(i) }

其次,您可以使用 isBitSet 映射初始序列。

def byte2Bools(b: Byte): Seq[Boolean] =
  0 to 7 map isBitSet(b)

def isBitSet(byte: Byte)(bit: Int): Boolean =
  ((byte >> bit) & 1) == 1

关于scala - 如何将 Seq[Byte] 转换为 Array[Boolean] 表示 Scala 中的每一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267771/

相关文章:

java - 将 byte 提升为 int 或 long

java - 在c#中将字符串转换为字节数组,在java中将字节数组转换为字符串

c - 在 c 中检索有符号 long long 的最高有效 32 位

c - 如何在C中打印5位/n位数字?

scala - Spark distinct 的实现

Scala.Either orElse 方法

scala - 如何在类级别为隐式参数提供默认值

java - 将视频分割为字节

java - java中对位集/位字符串求和的最佳方法是什么

scala - Scala Slick如何将Scala代码转换为JDBC?