gpt4 book ai didi

haskell - 从解析字节流返回一个类型的列表,其中的长度直到运行时才知道

转载 作者:行者123 更新时间:2023-12-04 05:32:15 30 4
gpt4 key购买 nike

我认为这更多是因为我对 Types 的复杂性缺乏了解。试图解决这个问题,我觉得我已经接近了几次,但还没有。

我正在尝试使用 Data.Binary 从流中读取。我已经到了下一部分可能有一个或多个块的地步,但是直到您开始解析流时才知道信息。我在返回这些多个块时遇到问题。

这是代码,如果我以错误的方式处理此问题,请告诉我。但请记住,我需要能够轻松地使用相同的脚手架来写回流。

可能有用的信息:

  • 流是一个 PE 文件
  • 我正在使用镜头(fclabels)
  • DataDirectory 类型在其他类型中嵌套了几层。

  • data DataDirectory = 
    DataDirectory { _dataEntryList :: [DataEntry] } deriving (Show, Eq, Ord)

    data DataEntry = DataEntry
    { _virtAddr :: Word32 -- VirtualAddress ^ relative virtual address of the table
    , _size :: Word32 -- Size ^ size of the table in bytes
    } deriving (Show, Eq, Ord)

    parseDataDir :: Word32 -> Get DataDirectory
    parseDataDir n = do
    -- PE Files have a maximum of 16 sections in the DataDir
    -- most windows tools just set this to 16 by default
    -- instead of hard-coding 16 sections we will verify
    let nDirs = fromIntegral (min mAX_NUMBEROF_DIRECTORY_ENTRIES n) :: Int
    dd_dentries <- parseDataEntry nDirs

    return $ DataDirectory dd_dentries

    parseDataEntry :: Int -> [Get DataEntry] -- Not exactly sure on return type here
    parseDataEntry n =
    Prelude.replicate n $ getWord32le >>= \vAddr -> getWord32le >>= \ddSize -> return $ DataEntry vAddr ddSize


    到目前为止,我一直避免抓取整个流并乘以 nDirs 按 8 个字节获取长度并解析。这当然适用于这种情况,但可能不适用于其他地方。

    最佳答案

    关于haskell - 从解析字节流返回一个类型的列表,其中的长度直到运行时才知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426986/

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