16進数から10進数の変換
Posted feedbacks - OCaml
F#で、入力HEX文字列は、コマンドライン引数で指定します。 uint64 の範囲で実行可 実行例: >hex2dec 0x12437308ccb6 20080902065334 >hex2dec 0x2c9c1227fc6520b 200904012311450123
1 2 3 4 5 6 7 8 9 10 11 12 13 | #light
open System
[<STAThread>]
[<EntryPoint>]
let main(args) =
match args with
| [|hexString|] ->
printfn "%u" <| uint64 hexString
| _ ->
printfn "Usage Hex2dec hexString"
0
|
1 2 | let [|hex_string|] = Sys.argv;;
print_endline (Int64.to_string (Int64.of_string hex_string));;
|
F# で、Math.BigInt を使って桁の制限をなくしたバージョン 実行例: > hex2dec "0x12437308CCB6";; val it : Math.BigInt = 20080902065334I > hex2dec "0x2C9C1227FC6520B";; val it : Math.BigInt = 200904012311450123I
1 2 3 4 5 6 7 8 | #light
let hex2dec (s:string) =
let hs = s.[2..] //先頭の0x を取り除く
let intToBigInt (x:int) = Math.BigInt(x)
let bs = 16I
let times_base x y = x * bs + y
Seq.fold times_base 0I <| Seq.map (intToBigInt << int << (^) "0x" << string) hs
|


shojiHIDAKA #8955() Rating1/1=1.00
16進数を10進数に変換してください。
ただし、入出力は文字列とし、次の変換は最低必ずできなければいけないこととします。
2.0x2C9C1227FC6520B →200904012311450123
あわせて、扱える最大の整数も明らかにしてください。
[ reply ]