Haskell Ptr字8到ByteString
我有一个FFI呼叫返回一些数据字节(不是Haskell Ptr字8到ByteString,haskell,ffi,bytestring,Haskell,Ffi,Bytestring,我有一个FFI呼叫返回一些数据字节(不是CString)。 目前,我正在使用类似以下内容: import qualified Data.ByteString as BS BS.pack <$> mapM (peekElem ptr) [0 .. n - 1] (我确实先检查了胡格尔。) 可能我使用了错误的类型来表示“原始字节将被二进制文件消耗。稍后获取或其他解码包”似乎您希望避免CString,因为(我认为非常好)它们以空结尾。更具原则性的CStringLen没有这个弱点,因此应
CString
)。
目前,我正在使用类似以下内容:
import qualified Data.ByteString as BS
BS.pack <$> mapM (peekElem ptr) [0 .. n - 1]
(我确实先检查了胡格尔。)
可能我使用了错误的类型来表示“原始字节将被
二进制文件消耗。稍后获取或其他解码包”似乎您希望避免CString
,因为(我认为非常好)它们以空结尾。更具原则性的CStringLen
没有这个弱点,因此应该适合您的任务。我想这正是我想要的。你能加上这个作为答案吗?字节是字节。(我认为字符串以null结尾,但packCStringLen允许我使用out。
ptrToBs :: Ptr Word8 -> Int -> IO ByteString
ptrToBs buf n = ... -- totally fine if it makes a copy of the buffer