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

时间:2019-07-16 15:28:04

标签: scala bit

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

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

我现在想读取此Byte数组的前3位:

这是我将其读取为字节数组的方式:

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

现在从这个Byte数组中获得了什么,我应该能够一点一点地读取整个序列。例如,前3位代表某个值,接下来的4位代表另一个值,类似。我对这些值的含义有规则,但我只是不知道如何对自己拥有的字节数组进行这种位操作!

是否有任何入门指南?

2 个答案:

答案 0 :(得分:2)

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

这是将单个字节转换为位数组的方法。 您只需调用即可将字节数组转换为位

val bits = bytes.flatMap(byte2Bools)

然后获得前3位为

bits.take(3)

答案 1 :(得分:1)

您尝试过bytes(0) & 0xE0来使用最左边的3位 (0xE0是11100000二进制掩码)

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

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

(0x07是00000111二进制掩码)