2016-03-15 45 views
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被消耗或一些其他的解碼包之後」?

+1

我想這正是我想要的。你可以添加這個答案嗎?字節是字節。 (我正在考慮將字符串視爲空終止,但packCStringLen允許我出局。 – Tim

回答