如何将String转换为BinaryLiterals

问题描述 投票:2回答:1

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

例如"11001100"0b11001100

haskell
1个回答
4
投票

使用readBin中的https://stackoverflow.com/a/5922212/126014,您可以将数字的二进制字符串表示形式解析为您选择的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等)与您编写文字数字的方式无关。

© www.soinside.com 2019 - 2024. All rights reserved.