python—如何以函数方式实现这一点?

f45qwnt8  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(360)

喂,我有一个 List[Byte] 这是为了代表一个国家 List[String] .
List[Byte] 的前四个元素可以转换为 Int32 . 这 Int 前四个元素后面的字符串长度。
然后循环直到没有字符串可读取。
我写了一个简单的 Python 代码,但仍希望以功能性方式执行此操作。并且更喜欢使用 Scala .
这是我的密码。

def _parse_type_string(raw: bytes):
    length = len(raw)
    result = []

    index = 0
    while index + 4 > length:
        read_length = int.from_bytes(raw[index: index + 4], 'little')
        if index + 4 + read_length > length:
            break
        content = raw[index + 4: index + 4 + read_length].decode('ascii')
        result.append(content)
        index = index + 4 + read_length
nwwlzxa7

nwwlzxa71#

我很想 unfold() 原始字节的列表。

val ss: List[String] =
  List.unfold(rawBytes){bs =>
    Option.when(bs.nonEmpty) {
      val len = 4 + bs.take(4).foldLeft(0)(_.<<(8) + _)
      (bs.slice(4, len).map(_.toChar).mkString, bs.drop(len))
    }
  }

相关问题