6

OCamlで16進、10進、2進の間で数値を変換する一般的な方法は何ですか?

たとえば、16 進数の 4294967276 (FFFFFFFC) を 10 進数に変換する方法は?

ありがとう!

ニック

4

1 に答える 1

11

あなたが何を求めているのかは明らかではありません。数字はあくまでも数字です、本当に。それらにはベースがありません (ハードウェア表現を無視します)。基数があるのは、数値を文字列に変換したり文字列から変換したりするときです。文字列を 10 進整数として解釈するには、int_of_string. 他のベースについては、 を使用できますScanf.sscanf。数値を 10 進文字列に変換するには、 を使用できます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

(または、入力に既にプレフィックスが含まれている可能性があります。その場合、これははるかに簡単なソリューションです。)

于 2013-03-20T14:51:47.680 に答える