5
OCaml中十六进制,十进制和二进制之间转换数字的一般方法是什么?如何转换OCaml中十六进制,十进制,十进制和二进制数之间的数字?
例如,如何转换十六进制4294967276(FFFFFFFC)为十进制数?
谢谢!
尼克
OCaml中十六进制,十进制和二进制之间转换数字的一般方法是什么?如何转换OCaml中十六进制,十进制,十进制和二进制数之间的数字?
例如,如何转换十六进制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
(或者,也许你的输入已经有前缀,在这种情况下,这是一个多简单的解决方案)
+1。和'Int64.of_string“0xFFFFFFFC”'为大数字。 – 2013-03-20 15:06:04
btw,int_of_string也接受其他的碱基,例如, 'int_of_string“0xF”' – 2013-03-20 15:10:31
这是一个很好的观点,谢谢。如果你不介意弄乱你的数字串,你可以使用int_of_string作为所有3个基地。也许我应该更新我的答案....? – 2013-03-20 15:11:27