2013-03-20 20 views

cevap

9

Ne soruyorsunuz belli değil. Sayılar gerçekten sayılardır. Bir üssü yok (donanım temsilini görmezden geliyor). Bir tabana sahip olduğunuz zaman, dizelere ve dizelerden sayıları dönüştürdüğünüz zamandır. Bir dize ondalık tamsayı olarak yorumlamak için int_of_string'u kullanabilirsiniz. Diğer bazlar için Scanf.sscanf'u kullanabilirsiniz. Sayıyı ondalık bir dizgeye dönüştürmek için string_of_int'u kullanabilirsiniz. Diğer bazlar için Printf.sprintf'u kullanabilirsiniz.

Verilen
# 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 kullanmak oldukça hantal. Ancak, OCaml Standard Library'deki başka bir dönüşüm işlevini bilmiyorum.

Güncelleme Girdinizin dizeye önek ekleme sakıncası yoksa size söz üsleri Tüm 4 için int_of_string kullanabilirsiniz barti_ddu gözlemlendiği üzere

:

# int_of_string "0xFC";; 
- : int = 252 
# int_of_string "0o374";; 
- : int = 252 
# int_of_string "0b11111100";; 
- : int = 252 

(Ya da belki girişinizi zaten bu bir çok basit bir çözümdür ve bu durumda öneki vardır)

+1

1.; ve büyük sayılar için Int64.of_string "0xFFFFFFFC" '. –

+1

btw, int_of_string diğer üsleri de kabul eder, ör. ' "0xf" int_of_string' –

+0

Bu iyi bir nokta, sayesinde. Rakam dizinizle uğraşmak istemiyorsanız birazcık int_of_string kullanabilirsiniz. Belki de cevabımı güncellemeliyim ....? –

İlgili konular