在OCaml中转换十六进制,八进制和二进制数字的一般方法是什么?
例如,如何将hex 4294967276(FFFFFFFC)转换为十进制数?
谢谢!
尼克
答案 0 :(得分:10)
目前尚不清楚你在问什么。数字只是数字,真的。它们没有基础(忽略硬件表示)。您拥有基数的时间是将数字转换为字符串和从字符串转换数字的时间。要将字符串解释为十进制整数,可以使用int_of_string
。对于其他基础,您可以使用Scanf.sscanf
。要将数字转换为十进制字符串,您可以使用string_of_int
。对于其他基础,您可以使用Printf.sprintf
。
# int_of_string "345";;
- : int = 345
# Scanf.sscanf "FC" "%x" (fun x -> x);;
- : int = 252
# string_of_int 345;;
- : string = "345"
# Printf.sprintf "%X" 252;;
- : string = "FC"
#
当然,Scanf.sscanf
使用起来相当麻烦。但我不知道OCaml标准库中的任何其他转换函数。
<强>更新强>
正如barti_ddu所观察到的,如果您不介意在输入字符串中添加前缀,则可以使用int_of_string
来表示您提到的所有4个基数:
# int_of_string "0xFC";;
- : int = 252
# int_of_string "0o374";;
- : int = 252
# int_of_string "0b11111100";;
- : int = 252
(或者你的输入可能已经有了前缀,在这种情况下,这是一个很多更简单的解决方案。)