【问题标题】:Haskell How to Create a Word8?Haskell 如何创建 Word8?
【发布时间】:2012-01-23 01:47:47
【问题描述】:

我想编写一个简单的函数,它使用'\n' 作为分隔符将ByteString 拆分为[ByteString]。我的尝试:

import Data.ByteString

listize :: ByteString -> [ByteString]
listize xs = Data.ByteString.splitWith (=='\n') xs

这会引发错误,因为 '\n'Char 而不是 Word8,这是 Data.ByteString.splitWith 所期望的。

如何将这个简单的角色变成Word8ByteString 可以玩?

【问题讨论】:

    标签: string haskell bytestring


    【解决方案1】:

    您可以只使用数字文字10,但如果您想转换字符文字,您可以使用fromIntegral (ord '\n')(需要fromIntegralord 返回的Int 转换为@ 987654331@)。您必须为 ord 导入 Data.Char

    您还可以导入Data.ByteString.Char8,它提供了在同一ByteString 数据类型上使用Char 而不是Word8 的功能。 (确实,它有一个 lines 函数,可以完全满足您的需求。)但是,通常建议这样做,因为 ByteStrings 不要存储 Unicode代码点(这是Char 所代表的),而是原始八位字节(即Word8s)。

    如果您正在处理文本数据,您应该考虑使用Text 而不是ByteString

    【讨论】:

    • 哦,哇。优秀的。我想我将不得不深入研究字符表示。我不知道字符的数字文字是什么。有没有他们的名单?
    • 我正在编写一个程序来解析蛋白质数据库文件,其中包含字符串、整数和双精度数。字符串主要用于从列表中识别正确的项目,而整数和双精度数将用于数学运算。我不确定我应该为此使用什么类。
    • 您可以在 GHCi 中使用 ord 来找出字符的码位编号 :) 我通常从 fileformat.info 获取 Unicode 数据; Basic Latin 块包含从 ASCII 继承的 128 个代码点。
    • 至于你的程序的合适类型,它取决于具体的格式和你在做什么,但如果它们不包含任何二进制数据,那么Text 可以正常工作。但是,如果字符串始终是纯 ASCII,并且您正在处理大量数据,那么ByteString 可能会更快。
    • 我现在如何创建 Word8?
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2012-10-03
    • 2011-09-05
    • 2019-08-14
    • 1970-01-01
    • 2011-03-28
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多