실제로 달성하고자하는 것에 따라 다릅니다. 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
출력하십시오`ByteString`가 Word8`s '로 구성되어있다
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]
음, 어떻게'Int'에'Word8'을 변환 할 수 있습니까? 'Int'는 특정 플랫폼이므로, 이것은 정말로 까다로운 부분입니다. 그 후에 그것은'BS.pack '처럼 간단 할 수 있습니다. V.toList' (가장 효율적인 방법은 아닐지라도)입니다. – bheklilr