Tim*_*Tim 3 haskell ffi bytestring
我有一个FFI调用返回一些数据字节(而不是a CString).目前,我正在使用以下内容:
import qualified Data.ByteString as BS
BS.pack <$> mapM (peekElem ptr) [0 .. n - 1]
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?谷歌搜索似乎指向使用Data.ByteString.Internal,但似乎不赞成(绑定到内部接口).事实上,他们似乎不再为内部模块提供文档. 是否有更有效的便携式方法? 在处理来自FFI的字节时,我经常遇到这个问题.我只是想:
ptrToBs :: Ptr Word8 -> Int -> IO ByteString
ptrToBs buf n = ... -- totally fine if it makes a copy of the buffer
Run Code Online (Sandbox Code Playgroud)
(我先检查过Hoogle.)
也许我使用错误的类型"以后使用原始字节Binary.Get或其他解码包"?
似乎你想避免CString(在我认为优秀)它们被终止的原因.原则越多CStringLen没有这个弱点,所以packCStringLen :: CStringLen -> IO ByteString应该适合你的任务.