6

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

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

谢谢!

缺口

4

1 回答 1

11

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

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

于 2013-03-20T14:51:47.680 回答