在OCaml中,转换十六进制、八进制和二进制数的一般方法是什么?
例如,如何将十六进制4294967276 (FFFFFFFC)转换为十进制数?
谢谢!
尼克
发布于 2013-03-20 14:51:47
还不清楚你在问什么。数字就是数字,真的。它们没有基(忽略硬件表示)。你有一个基的时间是你在字符串之间转换数字的时候。要将字符串解释为十进制整数,可以使用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所观察到的,如果您不介意在输入字符串中添加一个前缀,那么您可以在您提到的所有4个基中使用int_of_string:
# int_of_string "0xFC";;
- : int = 252
# int_of_string "0o374";;
- : int = 252
# int_of_string "0b11111100";;
- : int = 252(或者您的输入已经有前缀,在这种情况下,这是一个简单得多的解决方案。)
https://stackoverflow.com/questions/15524450
复制相似问题