将Ptr Word8转换为ByteString

4

我有一个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或其他解码包消耗的原始字节”时使用了错误的类型?


1
我想这正是我想要的。你能把它作为答案添加吗?字节就是字节。(我一直认为字符串以空字符结尾,但packCStringLen让我有了另一种选择。) - Tim
1个回答

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接