Haskell 程式將檔案轉換為位元組陣列


在 Haskell 中,我們將使用 B.readFile 函式以及 fromIntegral 和 foldl 函式將檔案轉換為位元組陣列。在第一個示例中,我們將使用 ( let byteArray = B.unpack bytes) ,在第二個示例中,我們將使用 (let wordArray = map fromIntegral (B.unpack bytes) :: [Word8]) 。在第三個示例中,我們將使用 (let byteArray = B.foldl' (\acc byte -> acc ++ [byte]) [] bytes)。

演算法

  • 步驟 1 − 匯入 Data.ByteString 模組。

  • 步驟 2 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它被寫成 main = do。

  • 步驟 3 − 使用檔名呼叫 B.readFile 函式。

  • 步驟 4 − 初始化名為“byteArray”的位元組陣列以解包檔案中的位元組。

  • 步驟 5 − 使用 print 函式將文字檔案的結果內容以位元組陣列的形式列印到控制檯。

示例 1

在此示例中,我們匯入了 Data.ByteString 和 Data.ByteString.Char8 模組,它們提供了用於處理位元組字串的函式。然後,我們使用 B.readFile 函式將名為 filename.txt 的檔案的內容讀取到名為 bytes 的 ByteString 值中。然後,我們使用 B.unpack 函式將 ByteString 值轉換為位元組列表(即位元組陣列),名為 byteArray。最後,我們使用 print 函式列印位元組陣列。

import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C

main :: IO ()
main = do
   bytes <- B.readFile "filename.txt"
   let byteArray = B.unpack bytes
   print byteArray

輸出

Hello, world!

示例 2

在此示例中,檔案使用 B.readFile 函式轉換為位元組陣列。但它不是一次列印整個位元組陣列,而是使用 mapM_ 函式在單獨的行上列印每個位元組。

import qualified Data.ByteString as B

main :: IO ()
main = do
   bytes <- B.readFile "filename.txt"
   let byteArray = B.unpack bytes
   mapM_ print byteArray

輸出

Hello, world!

示例 3

在此示例中,我們使用 fromIntegral 函式將每個位元組從 Int 轉換為 Word8。然後,我們使用 :: 運算子指定結果列表的型別應為 [Word8]。如果您需要對位元組執行算術或按位運算,這將非常有用。

import qualified Data.ByteString as B
import Data.Word (Word8)

main :: IO ()
main = do
   bytes <- B.readFile "filename.txt"
   let wordArray = map fromIntegral (B.unpack bytes) :: [Word8]
   mapM_ print wordArray

輸出

Hello, world!

示例 4

在這種方法中,我們使用 B.foldl' 函式應用一個函式,該函式將位元組累積到列表中。初始累加器值為空列表 [],累加函式只是將每個位元組附加到列表的末尾。這種方法可能比以前的方法慢,但如果您需要在讀取檔案時對位元組執行更復雜的運算,它將非常有用。

import qualified Data.ByteString as B

main :: IO ()
main = do
   bytes <- B.readFile "filename.txt"
   let byteArray = B.foldl' (\acc byte -> acc ++ [byte]) [] bytes
   mapM_ print byteArray

輸出

Hello, world!

結論

在 Haskell 中,可以將檔案讀取為位元組流,然後轉換為位元組陣列。位元組陣列是可用於表示二進位制資料的位元組序列。它可用於儲存或傳輸二進位制資料,例如影像、音訊或影片檔案。要在 Haskell 中將檔案轉換為位元組陣列,我們可以使用 Data.ByteString 模組,該模組提供了用於處理位元組字串的有效函式。具體來說,我們可以使用 B.readFile 函式將檔案的內容讀取到 ByteString 值中,然後使用 B.unpack 函式將 ByteString 值轉換為位元組列表(即位元組陣列)。

更新於: 2023-04-25

313 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.