我有一个FFI调用,返回一些数据字节(不是 CString
)。
目前,我正在使用类似以下的方法:
import qualified Data.ByteString as BS
BS.pack <$> mapM (peekElem ptr) [0 .. n - 1]
有没有更有效率的方法?在谷歌上搜索似乎指向使用Data.ByteString.Internal
,但这似乎不被认可(绑定到内部接口)。实际上,它们似乎已经不再提供内部模块的文档。 有更有效便携的方法吗? 处理来自FFI的字节时,我经常遇到这个问题。 我只想要:
ptrToBs :: Ptr Word8 -> Int -> IO ByteString
ptrToBs buf n = ... -- totally fine if it makes a copy of the buffer
(我先检查了Hoogle。)
也许我在使用“后续由Binary.Get
或其他解码包消耗的原始字节”时使用了错误的类型?