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