在 Scala 中读取字节数组中的前 n 位

Read First n Bits in a Byte Array in Scala

我有一个字节数组,例如:

0 240 167 43 200 209 57 213 1 89 182 103 60 43 0 0

我现在想读取这个字节数组的前 3 位:

以下是我将其读作字节数组的方式:

  val bytes = "0 240 167 43 200 209 57 213 1 89 182 103 60 43 0 0".getBytes("utf-8")

现在从我所拥有的这个字节数组中,我应该能够一点一点地读取整个序列。例如,前 3 位代表某个值,接下来的 4 位代表另一个值等等。我有这些值的含义的规则,但我只是不知道如何对我拥有的字节数组执行这样的位操作!

关于如何开始的任何指示?

How to convert a Seq[Byte] into an Array[Boolean] representing each bit in Scala

以下是将单个字节转换为位数组的方法。 您可以通过简单地调用

将字节数组转换为位
val bits = bytes.flatMap(byte2Bools)

然后获取前 3 位作为

bits.take(3)

你试过了吗bytes(0) & 0xE0这会使用最左边的 3 位 (0xE0 是 11100000 二进制掩码)

...尝试(255 & 0xE0) >> 5将它们转换为整数

您可能需要第一个字节的前 3 位:(bytes(0) & 0x07)

(0x07 是 00000111 二进制掩码)