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

Nic*_*ick 5 ocaml

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

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

谢谢!

缺口

Jef*_*eld 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"
# 
Run Code Online (Sandbox Code Playgroud)

当然,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
Run Code Online (Sandbox Code Playgroud)

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