无论如何都要将String
转换为BinaryLiterals
类型?
例如"11001100"
到0b11001100
答案 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
);他们只是用不同的方式来编写相同的数字。用于在内存中存储该数字的数据类型(Int
,Word8
等)与您编写文字数字的方式无关。