在 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 二进制掩码)
我有一个字节数组,例如:
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 二进制掩码)