如何在OCaml中转换十六进制,八进制,十进制和二进制之间的数字?

在OCaml中转换十六进制,八进制和二进制数字的一般方法是什么?

例如,如何将hex 4294967276(FFFFFFFC)转换为十进制数?

谢谢!

缺口

最佳答案
目前尚不清楚你在问什么.数字只是数字,真的.它们没有基础(忽略硬件表示).您拥有基数的时间是将数字转换为字符串和从字符串转换数字.要将字符串解释为十进制整数,可以使用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

(或者您的输入可能已经有前缀,在这种情况下,这是一个更简单的解决方案.)

转载注明原文:如何在OCaml中转换十六进制,八进制,十进制和二进制之间的数字? - 代码日志