簡體   English   中英

在Haskell中將Vector轉換為ByteString

[英]Converting Vector to ByteString in Haskell

我很困惑我如何將Data.Vector.Storable的向量轉換為ByteString。 我猜我錯過了一些相當明顯的東西。

我需要將它轉換為ByteString,因為我想通過網絡發送它,使用Network.Socket.ByteString,它似乎是最有效的數據結構。

如何編寫代碼來編寫函數

writeToByteString :: Vector Int -> ByteString
writeToByteString v = 

非常感謝。

這取決於你真正想要實現的目標。 正如bheklilr所提到的, Int表示是特定於平台的。

但在引擎蓋下,可存儲的矢量是一塊記憶。 要獲取其內容,請使用unsafeToForeignPtr0 這是一個例子:

import qualified Data.Vector.Storable as V
import qualified Data.ByteString as BS

import Foreign

main :: IO ()
main = do
  let v = V.generate 10 id :: V.Vector Int
      (fptr, len) = V.unsafeToForeignPtr0 v
  print v
  bs <- withForeignPtr fptr $ \ptr ->
    BS.packCStringLen (castPtr ptr, len * sizeOf (undefined :: Int))
  print $ BS.unpack bs

輸出:

fromList [0,1,2,3,4,5,6,7,8,9]
[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0]

暫無
暫無

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

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