From: Brendan Hansen Date: Wed, 2 Feb 2022 16:37:38 +0000 (-0600) Subject: str_to_i64 works in multiple bases X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=49666d49b2102fd80bc41ce12f190836858fd72a;p=onyx.git str_to_i64 works in multiple bases --- diff --git a/core/conv.onyx b/core/conv.onyx index 55600cbf..edf14d6a 100644 --- a/core/conv.onyx +++ b/core/conv.onyx @@ -36,7 +36,7 @@ Custom_Format :: struct { format: (^Format_Output, ^Format, rawptr) -> void; } -str_to_i64 :: (s: str) -> i64 { +str_to_i64 :: (s: str, base: u32 = 10) -> i64 { use package core value: i64 = 0; @@ -53,10 +53,24 @@ str_to_i64 :: (s: str) -> i64 { for c: s do switch c { case #char "0" .. #char "9" { - value *= 10; + value *= ~~base; value += ~~(c - #char "0"); } + case #char "A" .. #char "Z" { + if base <= 10 do fallthrough; + + value *= ~~base; + value += ~~(c - #char "A"); + } + + case #char "a" .. #char "z" { + if base <= 10 do fallthrough; + + value *= ~~base; + value += ~~(c - #char "a"); + } + case #default do break break; }