OCamlで16進、10進、2進の間で数値を変換する一般的な方法は何ですか?
たとえば、16 進数の 4294967276 (FFFFFFFC) を 10 進数に変換する方法は?
ありがとう!
ニック
OCamlで16進、10進、2進の間で数値を変換する一般的な方法は何ですか?
たとえば、16 進数の 4294967276 (FFFFFFFC) を 10 進数に変換する方法は?
ありがとう!
ニック
あなたが何を求めているのかは明らかではありません。数字はあくまでも数字です、本当に。それらにはベースがありません (ハードウェア表現を無視します)。基数があるのは、数値を文字列に変換したり文字列から変換したりするときです。文字列を 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
(または、入力に既にプレフィックスが含まれている可能性があります。その場合、これははるかに簡単なソリューションです。)