如何将String转换为BinaryLiterals

时间:2018-01-02 18:24:33

标签: haskell

无论如何都要将String转换为BinaryLiterals类型?

例如"11001100"0b11001100

1 个答案:

答案 0 :(得分:4)

使用https://stackoverflow.com/a/5922212/126014中的readBin,您可以将数字的二进制字符串表示形式解析为您选择的Maybe Integral,例如:

*Q48065932> readBin "11001100"
Just 204

11001100只是(十进制)整数204的二进制表示。使用BinaryLiterals,您可以使用二进制表示来编写该数字:

*Q48065932> :set -XBinaryLiterals
*Q48065932> Just 0b11001100
Just 204

如果您希望整数是特定类型(例如:Word8),则可以对两个表达式执行此操作:

*Q48065932 Data.Word> readBin "11001100" :: Maybe Word8
Just 204
*Q48065932 Data.Word> Just 0b11001100 :: Maybe Word8
Just 204

您可以通过比较它们来说服自己这两个表达式具有相同的值:

*Q48065932 Data.Word> readBin "11001100" == Just 0b11001100
True

您也可以使用十六进制表示法编写数字204,如下所示:

*Q48065932 Data.Word> Just 0xCC
Just 204

那仍然等于11001100

*Q48065932 Data.Word> Just 0xCC == readBin "11001100"
True
*Q48065932 Data.Word> Just 0xCC == Just 204
True

所有这些表达方式彼此相同,因为它们是相同的数字(204);他们只是用不同的方式来编写相同的数字。用于在内存中存储该数字的数据类型(IntWord8等)与您编写文字数字的方式无关。