gpt4 book ai didi

haskell - 在 Haskell 中将 Vector 转换为 ByteString

转载 作者:行者123 更新时间:2023-12-01 03:51:16 25 4
gpt4 key购买 nike

我对如何将 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]

关于haskell - 在 Haskell 中将 Vector 转换为 ByteString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22508826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com