簡體   English   中英

Ptr Word8到ByteString

[英]Ptr Word8 to ByteString

我有一個FFI調用返回一些數據字節(不是CString )。 目前,我正在使用以下內容:

import qualified Data.ByteString as BS

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

有更有效的方法嗎? 谷歌搜索似乎指向使用Data.ByteString.Internal ,但似乎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或其他一些解碼包后來使用的原始字節”?

看來你想避免CString (在我認為優秀)的原因,他們是空終止的。 更有原則性的CStringLen沒有這個弱點,因此packCStringLen :: CStringLen -> IO ByteString應該適合您的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM