ByteString到Vector转换

Val*_*e94 5 haskell vector

我有一个ByteString包含Floats 的表示.每个Float都由3个字节表示ByteString.

我需要做的一些处理Float的价值观,所以我想在一个执行该处理VectorFloat值.最好的方法是什么?

我有一个函数toFloat :: [Word8] -> Float将3个字节转换ByteString为Float.所以我在考虑迭代ByteString3个字节的步骤并将每个步骤转换Float为a vector.

我看过图书馆的功能,Vector但找不到任何适合这个目的的东西.Data.Vector.Storable.ByteString.byteStringToVector看起来很有前途,但它的每一个字节转换(而不是每3个字节),不给我过的如何转换任何控制ByteStringFloat应该发生.

ram*_*ion 5

只需使用Data.Vector.generate

V.generate (BS.length bs `div` 3) $ \i ->
  myToFloat (bs BS.! 3*i) (bs BS.! 3*i+1) (bs BS.! 3*i+2)
Run Code Online (Sandbox Code Playgroud)

它将一次分配所有向量,并填充它。 Data.ByteString.!是 O(1),所以这是非常有效的。

  • 这几乎是我尝试过的“展开”版本的两倍。http://sprunge.us/cjfe (2认同)