Ptr Word8到ByteString

时间:2016-03-15 22:31:07

标签: haskell ffi bytestring

我有一个FFI调用返回一些数据字节(不是CString)。 目前,我正在使用以下内容:

import qualified Data.ByteString as BS

BS.pack <$> mapM (peekElem ptr) [0 .. n - 1]

有更有效的方法吗?谷歌搜索似乎指向使用Data.ByteString.Internal,但似乎不赞成(绑定到内部接口)。实际上they don't seem已经为内部模块提供了文档。 是否有更高效的可移植方法?在处理来自FFI的字节时,我经常遇到这个问题。我只想要:

ptrToBs :: Ptr Word8 -> Int -> IO ByteString
ptrToBs buf n = ... -- totally fine if it makes a copy of the buffer

(我先检查过Hoogle。)

也许我使用了错误的类型“以后Binary.Get或其他解码包消耗的原始字节”?

1 个答案:

答案 0 :(得分:7)

似乎你想避免CString(在我认为优秀)的原因,他们是空终止的。原则性CStringLen没有这个弱点,因此packCStringLen :: CStringLen -> IO ByteString应该适合您的任务。