2013-03-20 137 views

回答

9

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

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

+1

+1。和'Int64.of_string“0xFFFFFFFC”'为大数字。 – 2013-03-20 15:06:04

+1

btw,int_of_string也接受其他的碱基,例如, 'int_of_string“0xF”' – 2013-03-20 15:10:31

+0

这是一个很好的观点,谢谢。如果你不介意弄乱你的数字串,你可以使用int_of_string作为所有3个基地。也许我应该更新我的答案....? – 2013-03-20 15:11:27

相关问题