2013-03-20 184 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

相關問題