3
我有一個FFI調用返回一些數據字節(不是CString
)。 目前,我使用類似如下:Ptr Word8到ByteString
import qualified Data.ByteString as BS
BS.pack <$> mapM (peekElem ptr) [0 .. n - 1]
有沒有更有效的方法呢?谷歌搜索似乎指向使用Data.ByteString.Internal
,但這似乎是皺眉(綁定到內部接口)。實際上they don't seem已經爲內部模塊提供文檔了。 有沒有更高效的便攜式方法?在處理來自FFI的字節時,我經常遇到這個問題。我只是想:
ptrToBs :: Ptr Word8 -> Int -> IO ByteString
ptrToBs buf n = ... -- totally fine if it makes a copy of the buffer
(我沒有先檢查Hoogle。)
也許我使用了錯誤類型爲「原始字節由Binary.Get
被消耗或一些其他的解碼包之後」?
我想這正是我想要的。你可以添加這個答案嗎?字節是字節。 (我正在考慮將字符串視爲空終止,但packCStringLen允許我出局。 – Tim